Python 在列表中迭代而不使用double for
我试图遍历下面的代码列表,但我对python有点陌生,我想知道是否有机会克服这两个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,
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范围。你是对的,这只是一个循环和元组解包,根据操作要求,如果你看到产品内部的功能,你会发现我为什么这么说。而且这个解决方案太慢了。