处理 Python 中的嵌套循环 - 选项?
Dealing with Nested Loops in Python - Options?
我有一个看起来像这样的函数(如下)。我在 python 中使用 xlrd。每当我执行 "print path" 函数时,我都会收到太多的路径迭代。本质上,我要做的是比较 excel 中的两列,然后打印出第三列。这非常有效,只是第三个打印了太多次,我认为问题出在嵌套循环上。
def question():
for x in xrange(sheet.nrows):
buddy = sheet.cell_value(x, 13)
newton = buddy.split(',')
james = sheet.col_values(15)
fred = sheet.col_values(17)
path = sheet.col_values(16)
path2 = sheet.col_values(18)
for i in xrange(len(newton)):
for n in xrange(len(james)) and xrange(len(path)):
if james[n] == newton[i]:
print path[n]
原谅我,我是python的新手,我一个月前才开始学习编程进行研究。我到处寻找潜在的修复方法,并了解了如何使用 zip() 和 map() 函数,但是,在尝试这样做时:
for i, n in zip(xrange(len(newton)), xrange(len(james)))
程序根本没有打印任何东西,即使我只是尝试打印 newton[i]。
当前代码按我想要的方式工作,我只是希望它在所有单元格上迭代一次,而不是多次(由嵌套循环引起),我不确定如何进行关于那个。谢谢!
这似乎更接近于想要的:
for new in newton:
for jam, pat in zip(james, path):
if jam == new:
print pat
要仅打印一次某些值,请先将它们收集到一个集合中;当您确定需要打印的内容后,打印出集合的内容。
toprint = set()
for x in xrange(sheet.nrows):
...
if james[n] == newton[i]:
toprint.add(path[n])
for name in sorted(toprint):
print(name)
当然有更好的方法来编写您要执行的操作,但我不太确定那是什么,并且此解决方案不会改变您的代码逻辑。
但请注意,您的代码实际上并没有按预期工作:表达式 xrange(len(james)) and xrange(len(path))
实际上与 xrange(len(path))
相同! (逻辑 and
returns 要么是 false 要么是第二个值。)所以循环
for n in xrange(len(james)) and xrange(len(path)):
其实是在做
for n in xrange(len(path)):
...
我有一个看起来像这样的函数(如下)。我在 python 中使用 xlrd。每当我执行 "print path" 函数时,我都会收到太多的路径迭代。本质上,我要做的是比较 excel 中的两列,然后打印出第三列。这非常有效,只是第三个打印了太多次,我认为问题出在嵌套循环上。
def question():
for x in xrange(sheet.nrows):
buddy = sheet.cell_value(x, 13)
newton = buddy.split(',')
james = sheet.col_values(15)
fred = sheet.col_values(17)
path = sheet.col_values(16)
path2 = sheet.col_values(18)
for i in xrange(len(newton)):
for n in xrange(len(james)) and xrange(len(path)):
if james[n] == newton[i]:
print path[n]
原谅我,我是python的新手,我一个月前才开始学习编程进行研究。我到处寻找潜在的修复方法,并了解了如何使用 zip() 和 map() 函数,但是,在尝试这样做时:
for i, n in zip(xrange(len(newton)), xrange(len(james)))
程序根本没有打印任何东西,即使我只是尝试打印 newton[i]。
当前代码按我想要的方式工作,我只是希望它在所有单元格上迭代一次,而不是多次(由嵌套循环引起),我不确定如何进行关于那个。谢谢!
这似乎更接近于想要的:
for new in newton:
for jam, pat in zip(james, path):
if jam == new:
print pat
要仅打印一次某些值,请先将它们收集到一个集合中;当您确定需要打印的内容后,打印出集合的内容。
toprint = set()
for x in xrange(sheet.nrows):
...
if james[n] == newton[i]:
toprint.add(path[n])
for name in sorted(toprint):
print(name)
当然有更好的方法来编写您要执行的操作,但我不太确定那是什么,并且此解决方案不会改变您的代码逻辑。
但请注意,您的代码实际上并没有按预期工作:表达式 xrange(len(james)) and xrange(len(path))
实际上与 xrange(len(path))
相同! (逻辑 and
returns 要么是 false 要么是第二个值。)所以循环
for n in xrange(len(james)) and xrange(len(path)):
其实是在做
for n in xrange(len(path)):
...