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

Posted

技术标签:

【中文标题】将列表与另一个没有循环的列表python合并【英文标题】:Merging list with another list python without loops 【发布时间】:2019-04-30 15:58:24 【问题描述】:

我有 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)

你有什么提示吗?是否可以通过避免循环来做到这一点?

非常感谢您的帮助

【问题讨论】:

你试过什么?这可以通过zip 和理解/map 来实现。 【参考方案1】:

不管你喜不喜欢,你都在循环播放。

[f'ba' for b in listB for a in listA]

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

【讨论】:

【参考方案2】:

您可以使用 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】:

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

你可以为你的列表做类似的事情,但是它涉及一个 for 循环:

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

【讨论】:

【参考方案4】:

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']

【讨论】:

谢谢,这正是我想要的。我一直在纠结如何使用 MultiIndex。谢谢!

以上是关于将列表与另一个没有循环的列表python合并的主要内容,如果未能解决你的问题,请参考以下文章

Python:如何使用 for 循环合并两个列表,如 zip

列表中的最小交换元素使其与另一个列表相同并计算python中的交换

python两个列表进行合并

两个布尔列/列表是不是匹配?两个不同大小的列的比较:一个列表的一部分是不是与另一个列表的一部分匹配? (Python)

Python:如何将具有相同变量类型的多个列表合并到一个列表列表中?

在Python中改变一个列表中元素的位置,使它们与另一个列表交叉匹配。