处理 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)):
    ...