Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列表中迭代而不使用double for_Python_List_Data Structures - Fatal编程技术网

Python 在列表中迭代而不使用double for

Python 在列表中迭代而不使用double for,python,list,data-structures,Python,List,Data Structures,我试图遍历下面的代码列表,但我对python有点陌生,我想知道是否有机会克服这两个for循环。有什么办法吗?提前谢谢 temp = [0, 2, 3, 4] for index, pointer in enumerate(temp): for i in range(len(temp)): if i != index: print(temp[i]) 结果: 2 3 4 0 3 4 0 2 4 0 2 3 输出 [2, 3, 4, 0, 3, 4,

我试图遍历下面的代码列表,但我对python有点陌生,我想知道是否有机会克服这两个for循环。有什么办法吗?提前谢谢

temp = [0, 2, 3, 4]
for index, pointer in enumerate(temp):
    for i in range(len(temp)):
        if i != index:
           print(temp[i])
结果:

2
3
4
0
3
4
0
2
4
0
2
3
输出

 [2, 3, 4, 0, 3, 4, 0, 2, 4, 0, 2, 3]
输出

 [2, 3, 4, 0, 3, 4, 0, 2, 4, 0, 2, 3]

我相信这能解决你的问题。我把这个问题想象成打印与其交叉连接的向量的元素,而不沿着生成矩阵的对角线打印元素

values = [0, 2, 3, 4]

for index in range(len(values)**2):
    if index % (len(values)+1) != 0:
        print(values[index % (len(values))])
输出:

2
3
4
0
3
4
0
2
4
0
2
3

我相信这能解决你的问题。我把这个问题想象成打印与其交叉连接的向量的元素,而不沿着生成矩阵的对角线打印元素

values = [0, 2, 3, 4]

for index in range(len(values)**2):
    if index % (len(values)+1) != 0:
        print(values[index % (len(values))])
输出:

2
3
4
0
3
4
0
2
4
0
2
3

使用
itertools
中的
product

[u for i, (j, u) in product(range(len(temp)), enumerate(temp)) if j != i]
这取决于您的列表(所有值都必须是唯一的),但这也适用于给定的输入

[v for u, v in product(temp, temp) if u != v]
两者都给予

[2, 3, 4, 0, 3, 4, 0, 2, 4, 0, 2, 3]

您甚至可以在迭代器中使用圆括号而不是方括号来转换这两者

使用
itertools
中的
产品

[u for i, (j, u) in product(range(len(temp)), enumerate(temp)) if j != i]
这取决于您的列表(所有值都必须是唯一的),但这也适用于给定的输入

[v for u, v in product(temp, temp) if u != v]
两者都给予

[2, 3, 4, 0, 3, 4, 0, 2, 4, 0, 2, 3]

您甚至可以在迭代器中使用圆括号而不是方括号来转换这两者

一种方法是使用,它“大致相当于嵌套for循环”

只需将被迭代的对象作为参数,例如,您的代码变成:

import itertools

temp = [0, 2, 3, 4]

for (index, pointer), i in itertools.product(enumerate(temp), range(len(temp))):
    if i != index:
        print(temp[i])
或者因为您似乎不需要
指针

import itertools

temp = [0, 2, 3, 4]

for i, j in itertools.product(range(len(temp)), range(len(temp))):
    if i != j:
        print(temp[j])

itertools.product
函数是以

只需将被迭代的对象作为参数,例如,您的代码变成:

import itertools

temp = [0, 2, 3, 4]

for (index, pointer), i in itertools.product(enumerate(temp), range(len(temp))):
    if i != index:
        print(temp[i])
或者因为您似乎不需要
指针

import itertools

temp = [0, 2, 3, 4]

for i, j in itertools.product(range(len(temp)), range(len(temp))):
    if i != j:
        print(temp[j])

itertools.product
函数是以的名称命名的。

我提出以下解决方案。使用的解决方案


我提出以下解决方案。使用的解决方案



您想要什么样的输出?你现在拥有的那个?“我想知道是否有机会克服这两个for循环。”我不确定这意味着什么,你能澄清一下吗?是的,我只是想知道是否有办法让它快速迭代。我不知道是否每个人都同意,但对代码目标的一些澄清可能会帮助我们更好地帮助您。我的目标是尽可能快地获取这些元素,我想知道是否有什么方法可以避免2 for循环,并获得与结果相同的输出。对不起,如果我不具体,这是我在这里的第一个问题。你想要什么输出?你现在拥有的那个?“我想知道是否有机会克服这两个for循环。”我不确定这意味着什么,你能澄清一下吗?是的,我只是想知道是否有办法让它快速迭代。我不知道是否每个人都同意,但对代码目标的一些澄清可能会帮助我们更好地帮助您。我的目标是尽可能快地获取这些元素,我想知道是否有什么方法可以避免2 for循环,并获得与结果相同的输出。对不起,如果我不明确的话,这是我在这里的第一个问题。我可能会说这不是很像蟒蛇。这很难读。好吧,我理解@JordanSinger。可能正确的描述是我使用列表理解。你觉得呢?我可能会说这不是很像蟒蛇。这很难读。好吧,我理解@JordanSinger。可能正确的描述是我使用列表理解。你怎么看?@M.Mar为什么要接受其他解决方案?我的解决方案比那个解决方案快得多,我对我的解决方案运行1000次,最多100次,我的解决方案比那个解决方案快75秒。奇怪,你要求少于2个循环的解决方案并接受3个循环的解决方案“奇怪,你要求少于2个循环的解决方案并接受3个循环的解决方案”-但是标记为正确的答案只使用一个用于循环的元组解包…@JordanSinger抱歉,我的错误没有在其中ssaw范围。你是对的,这只是一个循环和元组解包,根据操作要求,如果你看到产品内部的功能,你会发现我为什么这么说。而且这个解决方案太慢了。@M.Mar为什么要接受另一个解决方案?我的解决方案比那个解决方案快得多,我对我的解决方案运行1000次,最多100次,我的解决方案比那个解决方案快75秒。奇怪,你要求少于2个循环的解决方案并接受3个循环的解决方案“奇怪,你要求少于2个循环的解决方案并接受3个循环的解决方案”-但是标记为正确的答案只使用一个用于循环的元组解包…@JordanSinger抱歉,我的错误没有在其中ssaw范围。你是对的,这只是一个循环和元组解包,根据操作要求,如果你看到产品内部的功能,你会发现我为什么这么说。而且这个解决方案太慢了。