我有一个列表,其中每个元素都是长字符串的长字符串:
['KLGNVAGELQPFAPSED', 'MPDNVSFELQPPASJED', 'YYLNVSFEDQPPAPMED']
我想要做的是生成一个新列表,其中每个元素都是来自第一个列表的相同位置的字符串。您还可以想象出与此相同的第一个列表:
KLGNVAGELQPFAPSED
MPDNVSFELQPPASJED
YYLNVSFEDQPPAPMED
所以我希望新列表包含第一个列表中相应列的元素,如下所示:
['KMY', 'LPY', 'GDL' 'NNN', ...]
我试过的是:
for i in sub1:
for j in i:
pos.append(j)
pos.append('\n')
但后来我无法将所有内容分成不同的行。
答案 0 :(得分:4)
您需要zip
列表中的元素,然后将元组作为字符串加入:
new_list = [''.join(i) for i in zip(*old_list)] # KMY, LPY, GDL, ...
答案 1 :(得分: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']
请注意,map
比不需要lambda
功能的list-comp快。
$ 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
您可以查看有关速度差here
的更多信息在某些情况下,地图可能在显微镜下更快(当你不是时 为此目的制作一个lambda,但在map中使用相同的函数 和listcomp)。在其他情况下,列表推导可能更快 大多数(不是全部)pythonistas认为它们更直接,更清晰。