---
# System prepended metadata

title: HW_内包表記
tags: [homework]

---

# HW_内包表記
###### tags: `homework`

## 1
```python=
birthday = ["19930911", "20010621", "19801110", "19980507", "20100101"]

year = [birthday[i][0:4] for i in range(len(birthday))]
#birthdayのi番目の数を4桁にスライス　これをbirのリストの長さだけ繰り返し = i回繰り返し
print("Year List: {}".format([year[i]+"年" for i in range(len(year))]))

month = [birthday[i][4:6] for i in range(len(birthday))]
print("Month List: {}".format([month[i]+"月" for i in range(len(month))]))

day = [birthday[i][6:] for i in range(len(birthday))]
print("Day List: {}".format([day[i]+"日" for i in range(len(month))]))

```


## 2
```python=
string = input("input string:")
strlist = string.split()
listE = []

for i in range(len(strlist)):
        n = int(input("Select a character in the {}: ".format(strlist[i])))
        while n < 0 or n > len(strlist[i])-1:
            n = int(input("Enter again: "))
        else:
            listE.append(strlist[i][n])
            
print("Selected character elements:",["{}".format(i) for i in listE])
```

## 3
```python=
birthday = ["19930911", "20010621", "19801110", "19980507", "20100101", "20090519", "20140712", "20110323", "19990415", "20001224"]
year = []
year = [birthday[i][0:4] for i in range(len(birthday))]
#birthdayのリストの長さだけ4桁スライスを繰り返し
print(year)

month = []
month = [birthday[i][4:6] for i in range(len(birthday))]
print(month)

newyear = []
newyear = [i for i in year if int(i) >= 2000]
print(newyear)

newmonth = []
newmonth = ["7~12" if int(i)>=7 and int(i)<=12 else "1~6" for i in month]
print(newmonth)
```

## 4
```python=
words = ['aaation', 'bbbtion', 'ccbtionshh', 'bbs', 'jjtion']

confirm = [words[i][len(words[i]):-5:-1] for i in range(len(words))]
#後ろから4つ分スライス
prelist = [words[i][-5:-len(words[i])-1:-1] for i in range(len(words))]
#後ろから五番目の文字から最初の文字までスライス
noitlist = [i for i in confirm if "noit" in confirm]

#noitがconfirmの中にあるか確認 >> noitがあったらそのindexをindex用のリスト(indexlist(*int*))に追加 >> 
#indexのリストの数字でforループを使い(for i in indexlist)、prelist[i]に"s"を添付。 終

print(confirm)
print(noitlist)
```
:::danger
-　コメントのつけ方についてですが、行の上につけてくださいね。

-　大野さんの考えとして、confirmの中にある要素が "noit"　と完全一致していれば、要素の index　を　新たなリスト「indexlist」に格納し、最終的に「indexlist」の要素を利用して照らし合わせ、同じindexの要素を処理することがわかったが、この「noitlist」の役割はなんですか？

```python=
noitlist = [i for i in confirm if "noit" in confirm]
```


:::

:::info
"noit" がある文字の位置のインデックスを入れるためのリストです。 
noitがある文字列>>>>>["aaation","bbbtion","jjtion"]
words内でのこれらのインデックス>>>>>>>[0,1,4]
:::

:::danger
つまり、この「noitlist」は「indexlist」ということで間違いないですか？

```python=
こういう風にすればいいですよ
noitlist = [ i for i in range(len(confirm)) if confirm[i] == "noit" ]
```

:::
#### 改訂版

```python=
words = ['aaation', 'bbbtion', 'ccbtionshh', 'bbs', 'jjtion']

confirm = [words[i][len(words[i]):-5:-1] for i in range(len(words))]
#後ろから4つ分スライス
print(confirm)
prelist = [words[i][-5:-len(words[i])-1:-1] for i in range(len(words))]
#後ろから五番目の文字から最初の文字までスライス
print(prelist)
noitlist = [ i for i in range(len(confirm)) if confirm[i] == "noit" ]
#noitがconfirmの中にあるか確認 あったらその位置のインデックスを返す
print(noitlist)

answer = [] 
answer = [prelist[i]+"s" for i in noitlist] #prelistの0,1,4番目の文字列にsを付加
print(answer)
```