Python 搜索列表2,因此速度非常慢,除非其中一个列表非常短。还有两个嵌套循环(第二个循环隐藏在in语句中)。根据编辑删除了my-1。但是,您的答案似乎与OP已经尝试过并发现不足的set(list2)没有太大区别。我同意,尽管我不确定我们是否可以做得更好,除非使用原

Python 搜索列表2,因此速度非常慢,除非其中一个列表非常短。还有两个嵌套循环(第二个循环隐藏在in语句中)。根据编辑删除了my-1。但是,您的答案似乎与OP已经尝试过并发现不足的set(list2)没有太大区别。我同意,尽管我不确定我们是否可以做得更好,除非使用原,python,performance,Python,Performance,搜索列表2,因此速度非常慢,除非其中一个列表非常短。还有两个嵌套循环(第二个循环隐藏在in语句中)。根据编辑删除了my-1。但是,您的答案似乎与OP已经尝试过并发现不足的set(list2)没有太大区别。我同意,尽管我不确定我们是否可以做得更好,除非使用原始python,除非我们事先知道要比较的数据。您的all(sl2中的l表示l1中的l)返回False。此处的计时比较不真实,因为您没有包括创建集合所需的时间。如果lis1和lis2是常量,我们可以通过缓存结果来消除执行任何操作的需要。@cmh我


搜索
列表2
,因此速度非常慢,除非其中一个列表非常短。还有两个嵌套循环(第二个循环隐藏在in语句中)。根据编辑删除了my-1。但是,您的答案似乎与OP已经尝试过并发现不足的
set(list2)没有太大区别。我同意,尽管我不确定我们是否可以做得更好,除非使用原始python,除非我们事先知道要比较的数据。您的
all(sl2中的l表示l1中的l)
返回False。此处的计时比较不真实,因为您没有包括创建集合所需的时间。如果lis1和lis2是常量,我们可以通过缓存结果来消除执行任何操作的需要。@cmh我对
all()
也使用了相同的方法。请参阅:
all(s1中的l表示s2中的l)
。all解决方案的好处是不需要将s2转换为一个集合。。。。缺点是它在Python中循环,而不是在C中循环;-)我刚刚意识到,我们的时机将合理地取决于特定的洗牌范围。一个更严格的测试是一系列的洗牌。这里的计时比较是不诚实的,因为你没有包括创建集合所需的时间。如果lis1和lis2是常量,我们可以通过缓存结果来消除执行任何操作的需要。@cmh我对
all()
也使用了相同的方法。请参阅:
all(s1中的l表示s2中的l)
。all解决方案的好处是不需要将s2转换为一个集合。。。。缺点是它在Python中循环,而不是在C中循环;-)我刚刚意识到,我们的时机将合理地取决于特定的洗牌范围。更严格的测试将是一系列的洗牌。
d = {1: 1, 2:2, 3:3}
l = [3, 4, 5]

for n in l:
  if not n in d:
    do_stuff
for n in l:
  if not d[n]:
    do_stuff
s_list2 = set(list2)
all_present = all(l in s_list2 for l in list1)
In [4]: l1 = range(100)
In [5]: l2 = range(1000)
In [6]: random.shuffle(l1)
In [9]: random.shuffle(l2)
In [20]: %timeit s2 = set(l2); all(l in s2 for l in l1)
10000 loops, best of 3: 26.4 us per loop
In [21]: %timeit s1 = set(l1); s2 = set(l2); s1.issubset(s2)
10000 loops, best of 3: 25.3 us per loop
In [2]: l1 = range(1000)
In [3]: l2 = range(100)
In [4]: random.shuffle(l1)
In [5]: random.shuffle(l2)
In [6]: sl2 = set(l2)
In [8]: %timeit ss = set(l2); set(l1) & ss == ss
10000 loops, best of 3: 27.8 us per loop
In [10]: %timeit s1 = set(l1); s2 = set(l2); s2.issubset(s1)
10000 loops, best of 3: 24.7 us per loop
In [11]: %timeit sl2 = set(l2); all(l in sl2 for l in l1)
100000 loops, best of 3: 3.58 us per loop
In [7]: l1 = range(10)
In [8]: l2 = range(10000)
In [9]: %timeit sl2 = set(l2); all(l in sl2 for l in l1)
1000 loops, best of 3: 230 us per loop
In [10]: %timeit sl1 = set(l1); all(l in sl1 for l in l2)
1000000 loops, best of 3: 1.45 us per loop
In [11]: %timeit s1 = set(l1); s2 = set(l2); s1.issubset(s2)
1000 loops, best of 3: 228 us per loop
In [12]: %timeit s1 = set(l1); s2 = set(l2); s2.issubset(s1)
1000 loops, best of 3: 228 us per loop
In [78]: import random

In [79]: lis2=range(100)

In [80]: random.shuffle(lis2)

In [81]: lis1=range(1000)

In [82]: random.shuffle(lis1)

In [83]: s1=set(lis1)

In [84]: all(l in s1 for l in lis2)
Out[84]: True

In [85]: %timeit all(l in s1 for l in lis2)
10000 loops, best of 3: 28.6 us per loop

In [86]: %timeit s2=set(lis2);s2.issubset(s1)
100000 loops, best of 3: 12 us per loop

In [87]: s2.issubset(s1)
Out[87]: True
l1.sort()
l2.sort()

j = 0
for i in range(0,len(l1)):
  while ((j < len(l2)) and (l1[i] == l2[j])):
    j = j+1
  if (j == len(l2)):
    break
  if (l1[i] > l2[j]):
    break

if (j == len(l2)): # all of l2 in l1