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