加入字符串列表列表

时间:2017-06-19 14:11:08

标签: python list

我有一个列表列表,其中每个元素都是一个字符:

 ngrams = [['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'],
 ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c']]

由此,我想生成一个内容为['aa','ab','ac','ba','bb','bc','ca','cb','cc']的新单个列表。每个列表的各个元素彼此相加,但是与列表的顺序相反。我想出了这个(np = 2):

for cnt in range(np-2,-1,-1):
  thisngrams[-1] = [a+b for (a,b) in zip(thisngrams[-1],thisngrams[cnt])]          

我的解决方案需要处理高于2的np。我希望这是O(np),这也不错。有人可以提出一种更有效和更快速的方法来做我想做的事情(或者这是一种很好的pythonic方法)?

1 个答案:

答案 0 :(得分:5)

你可以试试这个:

ngrams = [['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'],
['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c']]

new = map(''.join, zip(*ngrams))

输出:

['aa', 'ba', 'ca', 'ab', 'bb', 'cb', 'ac', 'bc', 'cc']

对于两个以上的元素:

n = [["a", "b", "c"], ["a", "c", "d"], ["e", "f", "g"]]

new = map(''.join, zip(* reversed(ngrams)))

#in Python3
#new = list(map(''.join, zip(* reversed(ngrams))))

输出:

['eaa', 'fcb', 'gdc']