将列表与另一个没有循环的列表python合并

时间:2018-11-28 17:03:04

标签: string python-3.x pandas join merge

我有2个看起来像这样的熊猫系列:

import pandas as pd
listA = [5,4,3]
listB = ["a","b","c"]
s = pd.Series(listA)
print(s)
p = pd.Series(listB)
print(p)

我想获得像这样混合在一起的2个列表的列表:

listTogether = ["a5","a4","a3","b5","b4","b3","c5","c4","c3"]
t = pd.Series(listTogether)
print(t)

您有什么提示吗?可以避免循环吗?

非常感谢您的帮助

4 个答案:

答案 0 :(得分:5)

MultiIndex的招数

listTogether = pd.MultiIndex.from_product([p,s.astype(str)]).map(''.join).tolist()
listTogether 
Out[242]: ['a5', 'a4', 'a3', 'b5', 'b4', 'b3', 'c5', 'c4', 'c3']

答案 1 :(得分:2)

无论是否喜欢,您都在循环播放。

[f'{b}{a}' for b in listB for a in listA]

['a5', 'a4', 'a3', 'b5', 'b4', 'b3', 'c5', 'c4', 'c3']

答案 2 :(得分:1)

您可以使用itertools产品

from itertools import product

pd.DataFrame(list(product(p.tolist(),s.astype(str).tolist()))).apply(''.join, axis = 1).tolist()

839 µs ± 18.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

['a5', 'a4', 'a3', 'b5', 'b4', 'b3', 'c5', 'c4', 'c3']

如果您想要一个非常有效的解决方案,请使用纯python方式

[''.join(i) for i in list(product(p.tolist(),s.astype(str).tolist()))]
79 µs ± 924 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

答案 3 :(得分:0)

使用zip可能会对您有所帮助。

您可以对列表执行类似的操作,但是其中包含一个for循环:

listTogether = ['{}{}'.format(a,b) for (a,b) in zip(listA,listB)]