关于python:将列表项拆分为列并附加到新列表

Split list items into columns and append to new list

我有一个列表,其中每个元素都是一个长度相同的长字符串:

1
['KLGNVAGELQPFAPSED', 'MPDNVSFELQPPASJED', 'YYLNVSFEDQPPAPMED']

我要做的是生成一个新的列表,其中每个元素都是来自第一个列表相同位置的字符串。您还可以想象相同的第一个列表:

1
2
3
KLGNVAGELQPFAPSED
MPDNVSFELQPPASJED
YYLNVSFEDQPPAPMED

因此,我希望新列表在第一个列表中具有来自相应列的元素,如下所示:

1
['KMY', 'LPY', 'GDL' 'NNN', ...]

我尝试的是:

1
2
3
4
5
for i in sub1:
   for j in i:
      pos.append(j)
   pos.append('
'
)

但是我不能把每件事都分成几行。


您需要将列表中的元素zip放在一起,然后将元组作为字符串连接起来:

1
new_list = [''.join(i) for i in zip(*old_list)] # KMY, LPY, GDL, ...


您可以使用mapzip

1
2
3
>>> l = ['KLGNVAGELQPFAPSED', 'MPDNVSFELQPPASJED', 'YYLNVSFEDQPPAPMED']
>>> map(''.join,zip(*l))
['KMY', 'LPY', 'GDL', 'NNN', 'VVV', 'ASS', 'GFF', 'EEE', 'LLD', 'QQQ', 'PPP', 'FPP', 'AAA', 'PSP', 'SJM', 'EEE', 'DDD']

请注意,在不需要lambda功能的地方,map比list comp快。

1
2
3
4
$ python -m timeit"[''.join(i) for i in zip(*['KLGNVAGELQPFAPSED', 'MPDNVSFELQPPASJED', 'YYLNVSFEDQPPAPMED'])]"
100000 loops, best of 3: 3.54 usec per loop
$ python -m timeit"map(''.join,zip(*['KLGNVAGELQPFAPSED', 'MPDNVSFELQPPASJED', 'YYLNVSFEDQPPAPMED']))"
100000 loops, best of 3: 2.87 usec per loop

你可以在这里了解更多关于速度差的信息

map may be microscopically faster in some cases (when you're NOT
making a lambda for the purpose, but using the same function in map
and a listcomp). List comprehensions may be faster in other cases and
most (not all) pythonistas consider them more direct and clearer.