如何在Python中使用枚举为内部循环指定起始索引?

时间:2019-04-05 02:54:33

标签: python-3.x

我有以下代码:

nums = [1, 2, 23, 1, 2, 3, ..., 10] # a lot of elements
for i, num1 in enumerate(nums):
   for j, num2 in enumerate(nums):
      if (i >= j): 
          continue
      # do something  

我相信我们会在这里迭代N^2对,是否有任何方法可以从j开始i + 1来减少一半的操作?

3 个答案:

答案 0 :(得分:1)

您可以使用itertool.combinations获得相同的元素组合。这可能是一个更干净的选择,并且避免在列表中占一小部分:

from itertools import product, combinations

nums = [1, 2, 3, 4] # a lot of elements

for num1, num2 in combinations(nums,2):
    print(num1, num2) # or do something else
  

1 2
  1 3
  1 4
  2 3
  2 4
  3 4

答案 1 :(得分:0)

我可以使用切片(这个想法是@Carcigenicate给出的):

nums = [1, 2, 23, 1, 2, 3, ..., 10] # a lot of elements
for i, num1 in enumerate(nums):
   for j, num2 in enumerate(nums[i+1:]):
      # do something  

答案 2 :(得分:0)

您可以先对列表进行切片,然后再将其枚举:

nums = [1, 2, 23, 1, 2, 3, ..., 10] # a lot of elements
for i, num1 in enumerate(nums):
   for j, num2 in enumerate(nums[i+1:]):
      # do something  

如果您不熟悉切片,可以使用它指定元素的子集:

>>> nums = [1, 2, 3, 4, 5]
>>> i = 2
>>> nums[i:]
[3, 4, 5]

尽管我提醒您,这不会降低您算法的整体复杂性。