2015-01-05 4 views
0

У меня есть два списка, и я хочу создать один список, содержащий его данные.Python - List concatenate

ls1 = ["1","2","3","4"] 

ls2 = ["4","3","2","1"] 

Ответ Я ищу имеет такой вид ....

ls3 = ["1-4","2-3","3-2","4-1"] 

Есть ли возможность достижения этой цели? Обратите внимание на знак минуса между цифрами.

+1

Любая причина, почему вы хотите это сделать? – monkut

+0

@monkut hahahah – jamylak

ответ

2

Так что ответ @ esthete правильный. Я просто хочу добавить объяснения.

>>> ls3 = ['-'.join(x) for x in zip(ls1, ls2)] 
['1-4', '2-3', '3-2', '4-1'] 

в [someaction(x) for x in somelist] будет возвращать список, где каждый элемент является someaction() выполняется на соответствующем x в somelist. Это называется списком .

В этом случае somelist является zip(ls1,ls2), который создает [(ls1[0], ls2[0]), (ls1[1], ls2[1]), ...]

Так zip(ls1,ls2) возвращает [('1', '4'), ('2', '3'), ('3', '2'), ('4', '1')]

someaction() является '-'.join() Что это делает он принимает Iterable последовательность строк и соединяет их вместе со строкой '-' между ними , Таким образом, вы могли бы сделать, чтобы получить ' to '.join(x)['1 to 4', '2 to 3', ...]

7
>>> ls3 = ['-'.join(x) for x in zip(ls1, ls2)] 
['1-4', '2-3', '3-2', '4-1'] 
2
>>> [ "{}-{}".format(ls1[x],ls2[x]) for x in range(len(ls1))] 
['1-4', '2-3', '3-2', '4-1'] 

с использованием карты:

>>> map("{}-{}".format,ls1,ls2) 
['1-4', '2-3', '3-2', '4-1'] 

использованием itertools.strmap:

>>> list(itertools.starmap("{}-{}".format,zip(ls1,ls2))) 
['1-4', '2-3', '3-2', '4-1'] 
+0

Это творческий подход. 'map ('{} - {}'. format, ls1, ls2)' сделает эту идею очень хорошей. – jamylak

+0

yep это alo nice 'list (itertools.starmap (" {} - {} ". format, zip (ls1, ls2))) ' ['1-4', '2-3', '3-2', '4-1'] – Hackaholic

+0

Позвольте мне обновить все это – Hackaholic