1

次のようなリスト(list1)があります。

[0, 1, 2]

各要素を文字列のリスト ( ) の先頭に追加したいlist2:

['Start|983471|String1|True\n',
 'Start|983472|String2|True\n',
 'Start|983473|String3|True\n']

与える:

['0|Start|983471|String1|True\n',
 '1|Start|983472|String2|True\n',
 '2|Start|983473|String3|True\n']

私のコード:

Finallist = []
x=0
while x < len(list1):
    for line in list2:
        Finallist.append("|".join((str(list1[x]),line)))
    x+=1

これにより、9行が返されます。どうしたの?それぞれのアイテムが追加されることを期待しています。

4

3 に答える 3

3

コードの問題は、効果的に 2 つのループがあることです。1 つはリストの長さまで通過x0、もう 1 つはリストの各行を通過するため、次のようになります。

for x in range(len(list1)):
    for line in list2:
        Finallist.append("|".join((str(list1[x]),line)))

したがって、各反復で、すべての行を追加しますlist1。おそらく次のようなものが必要でした:

for x in range(len(list1)):
    Finallist.append("|".join((str(list1[x]),list2[x])))

リスト内包表記を使用してよりコンパクトに行う方法は次のとおりです。

>>> list1 = [0, 1, 2]
>>> list2 = ['Start|983471|String1|True\n',
 'Start|983472|String2|True\n',
 'Start|983473|String3|True\n']
>>> ['{0}|{1}'.format(num, s) for num, s in zip(list1, list2)]
['0|Start|983471|String1|True\n', '1|Start|983472|String2|True\n', '2|Start|983473|String3|True\n']

各行のインデックスを使用しているだけなので、代わりに次を使用できます。

['{0}|{1}'.format(i, s) for i, s in enumerate(list2)]
于 2013-04-18T10:30:42.730 に答える