【发布时间】:2015-04-05 01:00:23
【问题描述】:
我已经尝试了一段时间,但找不到一种简单的方法来连接仅基于公共值的 2 个列表或数组。类似于 SQL 内连接,但使用数组/列表而不是 dict 或其他一些数据类型。例如。
a = [1, 2, 3]
b = [2, 3, 4]
join(a, b)
打印
[2, 3]
看起来很简单,但缺少 python 或 numpy。
【问题讨论】:
-
你需要列表的交集吗?
我已经尝试了一段时间,但找不到一种简单的方法来连接仅基于公共值的 2 个列表或数组。类似于 SQL 内连接,但使用数组/列表而不是 dict 或其他一些数据类型。例如。
a = [1, 2, 3]
b = [2, 3, 4]
join(a, b)
打印
[2, 3]
看起来很简单,但缺少 python 或 numpy。
【问题讨论】:
可能是重复的,但万一不是:
>>> a = [1,2,3]
>>> b = [2,3,4]
>>> list(set(a) & set(b))
[2, 3]
对于大型列表(外部数据),请参阅this S.O. answer。
【讨论】:
& 执行集合交集,返回一个新集合,其中包含a 和b 中的所有元素。它与比特无关。如果在两个int 操作数之间使用& 运算符,那么它将执行按位与。在 Python 中,您可以创建自己的类并让操作符做几乎任何您想做的事情。如果使用得当,这通常被认为是一件好事。顺便说一句,Python set 类使 | 执行联合,^ 执行不相交联合,- 执行集合减法。
如果您需要保持列表与a中相同的顺序:
a = [1, 2, 3]
b = [2, 3, 4]
c = [x for x in a if x in b]
如果顺序不重要,请使用 Ray 答案,这应该会更快,但不能保证列表顺序与 a 中的元素顺序相同。
【讨论】: