12

実際には、2 つのリストを 1 つの文字列にマージしようとしていますが、順序付けされた意味を保ちます。

list1 = [1,2,3,4,5]
list2 = ["one", "two", "three", "four", "five"]

result = "1one2two3three4four5five"

(リストの長さは常に同じですが、内容は異なります)

現時点では、私はこのようにしています:

result = ""
i = 0

for entry in list1:
    result += entry + list2[i]
    i += 1

これを行うにはもっとpythonicな方法があるに違いないと思いますが、実際にはわかりません。

あなたの誰かがこれについて私を助けてくれますように。

4

4 に答える 4

22
list1 = [1,2,3,4,5]
list2 = ["one", "two", "three", "four", "five"]

print ''.join([str(a) + b for a,b in zip(list1,list2)])
1one2two3three4four5five
于 2013-03-29T12:52:15.833 に答える
4
>>> import itertools
>>> ''.join(map(str, itertools.chain.from_iterable(zip(list1, list2))))
1one2two3three4four5five'

説明:

  • zip(list1, list2)2 つのリストから一致する要素のタプルを含むリストを作成します。

    >>> zip(list1, list2)
    [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five')]
    
  • itertools.chain.from_iterable()ネストされたリストを平坦化します。

    >>> list(chain.from_iterable(zip(list1, list2)))
    [1, 'one', 2, 'two', 3, 'three', 4, 'four', 5, 'five']
    
  • ここで、文字列のみが存在することを確認する必要があるため、次をstr()使用してすべてのアイテムに適用しますmap()

  • 最終的''.join(...)に、リスト項目をセパレータなしの単一の文字列にマージします。
于 2013-03-29T12:52:43.133 に答える
4

と で文字列フォーマットを使用する:str.join()zip()

>>> list1 = [1,2,3,4,5]
>>> list2 = ["one", "two", "three", "four", "five"]

>>> "".join("{0}{1}".format(x,y) for x,y in zip(list1,list2))
'1one2two3three4four5five'

zip(list1,list2)次のようなものを返します: [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five')].

このリストの各項目に対して、文字列の書式設定を適用し、 を使用してジェネレータ式全体を結合しstr.join()ます。

于 2013-03-29T12:55:56.617 に答える
2
>>> ''.join(str(n)+s for (n,s) in zip(list1, list2))
'1one2two3three4four5five'

ここ:

  • for (n,s) in zip(list1, list2)list1and内の要素のペアを反復処理しますlist2(つまり1、and"one"など)。
  • str(n)+s"1one"各ペアを文字列 (例: )に変換します。
  • ''.join(...)結果を単一の文字列にマージします。
于 2013-03-29T12:52:18.420 に答える