1

たとえば、同じ長さの 2 つのリストがあるとします。

['a','b','c','d']
['r','t','y','h']

これら 2 つのリストの場合、出力は次のようになります。

'ar', 'bt', 'cy', 'dh'

基本的に、最初のリストの最初の要素から 2 番目のリストの最初の要素へ、というように続きます。どうすればいいですか?また、リストの長さは例に示されているものだけでなく、任意の長さにすることができますが、最初のリストの長さは 2 番目のリストの長さと同じであることに注意してください。

4

5 に答える 5

5

zipそれらを結合するためのリスト、次にjoin文字列の各ペアを単一の文字列にします。

>>> list1 = ['a','b','c','d']
>>> list2 = ['r','t','y','h']
>>> [''.join(pair) for pair in zip(list1, list2)]
['ar', 'bt', 'cy', 'dh']
于 2013-07-30T00:32:36.043 に答える
1

上記の回答は Python 2.7 でも有効なようです。さらに、zip とインライン加算器 (ラムダ) を使用することもできます。

1:

list1 = ['a','b','c','d']

list2 = ['r','t','y','h']

add = lambda pair:pair[0]+pair[1]

print [add(pair) for pair in zip(list1, list2)]

2:

または1行で:

print map(lambda pair:pair[0]+pair[1],[pair for pair in zip(list1,list2)])

3:

map()複数の引数をマッピングできるため、短い解決策が得られます。

print map(lambda x,y:x+y, list1, list2)
于 2016-10-07T21:02:10.947 に答える
1

mapとを使用zipしてジョブを実行できます。

>>> l1=['a','b','c','d']
>>> l2=['r','t','y','h']
>>> map(lambda(x,y): x+y, zip(l1,l2))
['ar', 'bt', 'cy', 'dh']

つまり、タプルのリストを作成します。izip番目のタプルには、各リストの i 番目の要素が含まれます。次に、各タプルを連結によって ( を使用して) 文字列に変換できますlambda(x,y): x+y

于 2013-07-30T00:36:53.923 に答える
1

機能的なアプローチが必要な場合は、使用できmapますoperator.add

import operator
map(operator.add,['a','b','c','d'], ['r','t','y','h'])
>>>['ar', 'bt', 'cy', 'dh']

lambdas連結を行うための理解もリストも必要ありません。

注: Python 3 ではないと言う人にとっては、このダンプによって考えが変わる可能性があります。

Python 3.1.3 (r313:86834, Nov 28 2010, 10:01:07)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import operator
>>> list(map(operator.add, ['a','b'],['r','t']))
['ar', 'bt']
于 2013-07-30T00:46:55.940 に答える
0

これを行うには、さらにいくつかの方法があります

>>> list1 = ['a','b','c','d']
>>> list2 = ['r','t','y','h']

>>> [x + y for x, y in zip(list1, list2)]
['ar', 'bt', 'cy', 'dh']

>>> it = iter(list2)
>>> [x + next(it) for x in list1]
['ar', 'bt', 'cy', 'dh']
于 2013-07-30T01:07:19.980 に答える