2011-12-03 24 views
0

文字列のリストが2つあり、最初のリストの最初の文字列が2番目のリストの最初の単語のタプルになるように2つのリストを結合して新しいリストを作成したいとします第二第二のように...文字列の組み合わせ

ただ、例えばと:

input: lst1 = ["hello", "first", "is"] 
input: lst2 = ["my", "name", "tom"] 
output: [("hello","my"), ("first", "name"), ("is", "tom")] 

私はそのようなことを書いた:私はここで間違って

lst1 = ["hello", "first", "is"] 
lst2 = ["my", "name", "tom"] 
new_list = [] 
    for i in lst1 : 
      for j in lst2 : 
        two_words = (i, j) 
        new_list.append(two_words) 
    return new_list 

何をしているのですか?

答えて

4

Julioの答えは、実際にそれを行うためのpyononicな方法です。しかし、あなたは間違って何をやっているあなたの質問にように、あなたのエラーはここにある:

for i in lst1 : 
      for j in lst2 : 

あなただけの両方と同じサイズである、結果をしたいので、あなたは、そのようなリストを反復処理する必要はありませんリスト。両方のリストが同じサイズであると仮定すると、単純に

lst1 = ["hello", "first", "is"] 
lst2 = ["my", "name", "tom"] 
new_list = [] 
    for i in range(len(lst1)): 
        new_list.append((lst1[i], list2[i])) 
    return new_list 
+0

私はそれを試してみましたが、それは言う:TypeError例外:「int型のオブジェクトでありますiterableではありません – user1073865

+0

@ user1073865問題はあなたが 'len(lst1)'(a int)を反復しようとしていることです。それを変更してください: 'range(len(lst1))'。 – juliomalegria

+0

はい、今は意味があります。ありがとうございました – user1073865

1

あなたの問題は、ループ内のループは可能なすべてのペアを作成する、「外積」を形成することです2つのリストからの文字列。解決策は、zipを使用するか、または可能なインデックス上で単一のループを作成することです。

0

リストの解説を使用して行うのが最も簡単な方法です。

lst1 = ["hello", "first", "is"] 
lst2 = ["my", "name", "tom"] 
new_list = [ (lst1[i], lst2[i]) for i in range (len(lst1)) ] 

あなたは内側の要素がリストになりたい場合は

、 使用

new_list = [ [ lst1[i], lst2[i] ] for i in range (len(lst1)) ] 

出力:

[('hello', 'my'), ('first', 'name'), ('is', 'tom')] 
関連する問題