显然xrange更快但我不知道为什么它更快(除了轶事到目前为止没有证据表明它更快)或者除此之外还有什么不同
for i in range(0, 20):
for i in xrange(0, 20):
Run Code Online (Sandbox Code Playgroud) 如何从一组列表中获取笛卡尔积(每种可能的值组合)?
输入:
somelists = [
[1, 2, 3],
['a', 'b'],
[4, 5]
]
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4), (2, 'a', 5) ...]
Run Code Online (Sandbox Code Playgroud) 在固体力学中,我经常使用Python并编写如下所示的代码:
for i in range(3):
for j in range(3):
for k in range(3):
for l in range(3):
# do stuff
Run Code Online (Sandbox Code Playgroud)
我经常这样做,我开始怀疑是否有更简洁的方法来做到这一点.当前代码的缺点是:如果我遵守PEP8,那么我不能超过每行79个字符的限制,并且没有太多的空间,特别是如果这又是一个类的功能.
我的问题很难解释.
我想创建一个包含嵌套for循环的函数,
其数量与传递给函数的参数成比例.
这是一个假设的例子:
Function(2)
Run Code Online (Sandbox Code Playgroud)
......会涉及......
for x in range (y):
for x in range (y):
do_whatever()
Run Code Online (Sandbox Code Playgroud)
另一个例子...
Function(6)
Run Code Online (Sandbox Code Playgroud)
......会涉及......
for x in range (y):
for x in range (y):
for x in range (y):
for x in range (y):
for x in range (y):
for x in range (y):
whatever()
Run Code Online (Sandbox Code Playgroud)
for循环(y)的变量实际上并未在嵌套代码中使用.
你的第一个想法可能是创建一个for循环,其范围是数字参数的功能......
这不能正常工作,因为产品将是巨大的.我需要实例,其中有8个嵌套for循环.
该产品对于for循环中的范围而言太大.
还有其他参数需要传递给函数,但我可以自己处理.
这是代码(它创建了Snowflake Fractal)
from turtle import *
length = 800
speed(0)
def Mini(length):
for x in range (3):
forward(length)
right(60)
penup()
setpos(-500, 0)
pendown()
choice …Run Code Online (Sandbox Code Playgroud) 我经常发现自己这样做:
for x in range(x_size):
for y in range(y_size):
for z in range(z_size):
pass # do something here
Run Code Online (Sandbox Code Playgroud)
有没有更简洁的方法在Python中执行此操作?我正在考虑的事情
for x, z, y in ... ? :
Run Code Online (Sandbox Code Playgroud) 我正在使用etree通过xml文件进行递归.
import xml.etree.ElementTree as etree
tree = etree.parse('x.xml')
root = tree.getroot()
for child in root[0]:
for child in child.getchildren():
for child in child.getchildren():
for child in child.getchildren():
print(child.attrib)
Run Code Online (Sandbox Code Playgroud)
在python中避免这些嵌套for循环的惯用方法是什么.
getchildren() ? list of Element instances [#]
Returns all subelements. The elements are returned in document order.
Returns:
A list of subelements.
Run Code Online (Sandbox Code Playgroud)
我在SO中看到了一些帖子,比如 避免嵌套for循环 但是没有直接转换为我的使用.
谢谢.
我有以下情况:
for x1 in range(x1, x2):
for x2 in range(x3, x4):
for x3 ...
...
f(x1, x2, x3, ...)
Run Code Online (Sandbox Code Playgroud)
如何将其转换为一种机制,在这种机制中我只告诉python制作n个嵌套循环,其中变量名是x1,x2,x3,x4,...?我当然不想手动编写所有可能性,因为可能有很多维度.
我正在为编程实践做一个项目欧拉问题,以便自我教学.我非常清楚如何以数学方式解决问题,以及如何以编程方式进行.
但是,我必须提出一些疯狂的代码才能做到这一点; 100个嵌套循环和Python搞笑地引发了这个错误,并且可能正确地提出了100个级别的缩进:
IndentationError: too many levels of indentation
tally = 0
ceiling = 100
for integer_1 in range(0, 100, 1):
for integer_2 in range(0, 100 - integer_1, 2):
for integer_3 in range(0, 100 - integer_1 - integer_2, 3):
for integer_4 ....
for integer_5 ....
etc.
etc.
all the way to integer_100
Run Code Online (Sandbox Code Playgroud)
我已经通过谷歌寻找解决方案,但这个问题是如此罕见,它几乎没有关于这个主题的文献,我只能找到这个其他堆栈溢出问题(Python IndentationError:太多级别的缩进),我找不到很多有用的我的问题.
我的问题是 - 有没有办法采取我的解决方案,找到一些解决方法或以一种有效的方式重构它?我真的很难过.
编辑:
感谢nneonneo的回答,我能够解决这个问题.我的代码仅供将来参考,以寻找正确重构代码的方法.
from time import time
t = time()
count_rec_dict = {}
# for finding …Run Code Online (Sandbox Code Playgroud) 如果我有一组像这样的循环:
x = [[...],[...],[...]]
for a in x[0]:
for b in x[1]:
for c in x[2]:
# Do something with a,b,c
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来简化它,特别是如果它有更多的级别?这似乎很容易做到,但我无法弄清楚.
像这样的东西.我想用10大小的字强制所有字符
lookup = map(chr, range(32, 127))
for i in lookup:
for j in lookup:
for k in lookup:
for l in lookup:
for m in lookup:
for n in lookup:
for o in lookup:
for p in lookup:
for q in lookup:
for r in lookup:
print(r) # whatever
Run Code Online (Sandbox Code Playgroud)
这是我的问题
1)有更好的方法吗?
2)这段代码的一个问题是打印(任何ijk ... r)无法正常工作,你能帮我解决问题吗?如果我给任何字符串它是工作但不是变量
3)我尝试使用perl,即使无法在循环中打印变量,如i,j,.. r
python ×10
loops ×4
for-loop ×3
dimensions ×1
foreach ×1
fractals ×1
idioms ×1
list ×1
nested ×1
nested-loops ×1
performance ×1
perl ×1
python-2.7 ×1
python-2.x ×1
python-3.x ×1
range ×1
recursion ×1
xrange ×1