如何将列表中的每个元素与所有其他元素一起迭代

2024-04-20 04:21:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个n元素的列表,我想检查列表中的任何元素x是否可以通过使用其他元素(y)中的一个来实现:

x =  y + 1 - 2*(x % 2) 

为此,我需要将列表中的每个元素x与所有其他元素一起迭代。我为循环嵌套了两个:

_list = [8,2,0,1]
for x in _list:
    for y in _list:
        if(x == y + 1 - 2*(x % 2)):
            # Do something
        else: pass

很明显,这个解决方案的问题是:它使用两个循环而不是一个循环;每个元素自身迭代;对(x,y)将检查两次。你知道吗

有没有其他方法可以用更少的代码和更高效的方式来实现这一点?你知道吗


Tags: 方法代码in元素列表forif方式
2条回答

让我们把你的主要问题再细分一下。你知道吗

x = y + 1 (if x is even)
x = y - 1 ( if x is odd)

从上面看,很明显,如果x是奇数,那么y是偶数,反之亦然。你知道吗

另外,x和y只有1个单位。换句话说,abs(x-y)==1。你的解决方案可以简单地归结为找到满足这个条件的所有数字。您还可以观察到x&y是可交换的。你知道吗

这篇文章不回答“少代码”部分,但回答有效的部分。;)


更新:我收回最后一句的前半部分。你知道吗

>>> from itertools import chain
>>> s =  [8,2,0,1]
>>> s1 = sorted(s)
>>> list(chain(*(((x,y),(y,x)) for (x,y) in zip(s1, s1[1:]) if y-x == 1)))
[(0, 1), (1, 0), (1, 2), (2, 1)]

您只需要检查当前元素之后的元素

for i in xrange(len(_list)):
  x = _list[i]
  for j in xrange(i+1,len(_list)):
    y = _list[j]
    if (..):
      # do something

相关问题 更多 >