假设我有两个非常大的列表(例如 1000 万行),其中包含一些值或字符串。我想弄清楚有多少项目从list1
都在list2
。
因此,这可以通过以下方式完成:
true_count = 0
false_count = 0
for i, x in enumerate(list1):
print(i)
if x in list2:
true_count += 1
else:
false_count += 1
print(true_count)
print(false_count)
这可以解决问题,但是,如果您有 1000 万行,这可能需要相当长的时间。是否有一些我不知道的甜蜜功能可以更快地做到这一点,或者完全不同的东西?
以下是使用 Pandas 数据框的方法。
import pandas as pd
import random
list1 = [random.randint(1,10) for i in range(10)]
list2 = [random.randint(1,10) for i in range(10)]
df1 = pd.DataFrame({'list1':list1})
df2 = pd.DataFrame({'list2':list2})
print (df1)
print (df2)
print (all(df2.list2.isin(df1.list1).astype(int)))
我只是选择 10 行并生成 10 个随机数:
清单 1:
list1
0 3
1 5
2 4
3 1
4 5
5 2
6 1
7 4
8 2
9 5
清单 2:
list2
0 2
1 3
2 2
3 4
4 3
5 5
6 5
7 1
8 4
9 1
if 语句的输出将是:
True
我检查的随机列表是:
list1 = [random.randint(1,100000) for i in range(10000000)]
list2 = [random.randint(1,100000) for i in range(5000000)]
用 10 百万进行了测试。list1 中的随机数,500 万。list2 中的随机数,我的 Mac 上的结果又回来了2.207757880999999 seconds
或者,您还可以将列表转换为集合并检查一个集合是否是另一个集合的子集。
set1 = set(list1)
set2 = set(list2)
print (set2.issubset(set1))
比较run的结果,set也很快。它回来了1.6564296570000003 seconds
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句