Python3で日本語のlistを扱う時の質問です。
list = ['スシ食べたい']
の'ス'を取得しようとすると、
list[0]で取得できる時もあれば、list[:3]で取得できる時もあります。
この違いがよくわかりません。
どなたかわかる方いますか?
開発環境は、
Mac/Terminalでemacs使ってます。
Python
1list = ['スシ', 'ビーフシチュー', 'ラーメン'] 2 3# 'スシ'の'ス'を出力したい 4 5#これで出力できる時もあれば 6print(list[0][0]) 7 8#これで出力できる時もある 9print(list[0][:3])
/-------------------追記----------------------/
実際のコードは競プロのものなので、似たものを追加いたします。
コードの目的はリストのなかでしりとりをさせるものです。
Python
1import copy 2 3list = ["スライド", "ドングリ", "ドミノ", "ドンブリ", "ヌードル"] 4 5def search(data, i, order): 6 data[i][3] = 1 7 for j in range(len(data)): 8 if j == len(data) - 1: print('fin') 9 elif data[i][2] == data[j][1]: 10 # search 11 # もし最後の文字と最初の文字が同じものがあれば再帰させる 12 order.append(len(order)) 13 search(data, j, order) 14 return order 15 16def main(): 17 # 最初の一文字を格納するためのリスト 18 s_list = [] 19 # 最後の一文字を格納するためのリスト 20 e_list = [] 21 # しりとりの順番を格納するためのリスト 22 order = [] 23 # 単語、一文字目、最後の文字をまとめて格納するためのリスト 24 m_list = [] 25 # m_listを全単語分まとめて格納するためのリスト 26 data = [] 27 28 for i in list: 29 s_list.append(i[0:3]) 30 e_list.append(i[len(i) - 3:]) 31 for i in range(len(list)): 32 m_list.append(list[i]) 33 m_list.append(s_list[i]) 34 m_list.append(e_list[i]) 35 m_list.append(0) 36 data.append(copy.deepcopy(m_list)) 37 del m_list[:] 38 39 for i in range(len(data)): 40 m_data = search(copy.deepcopy(data), copy.deepcopy(i), copy.deepcopy(order)) 41 # search関数より得られた順番を出力 42 print(str(m_data).decode('string-escape') 43 44if __name__ == '__main__': 45 main() 46
サンプルコードにおいて print(list[0][:3]) は「スシ」となるはずですが、「ス」と出るということですか?
はい。「ス」と表示される時もあれば、「スシ」と表示される時もあります。最初はprint(list[0][0])で「ス」が表示できていたのですが、途中からエラーが出るようになってしまいました。いろいろ試したところ、print(list[0][:3])で「ス」と表示されてしまうのでおかしいと思い、質問いたしました。
「途中からエラーが出る」というのは具体的にどういったエラーメッセージですか?
論理エラーの類かと思います。元々は正常に「ス」と表示されていたのですが、途中から「?」と表示されるようになってしまいました。「?」が半角だったので、もしかしたら半角で認識されているのでは?と考えました。いろいろと弄った結果、print(list[0][:3])でうまくいきました。
実際に問題を再現出来るコードと、実際に出力されたエラーメッセージを可能な範囲で質問本文に追記いただけますか。
ご指摘ありがとうございます。追記いたしました。

回答2件
あなたの回答
tips
プレビュー