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