# 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)
```