首页 > 解决方案 > 使用 indeces 迭代元组列表理解

问题描述

我正在尝试使用 indeces 迭代列表理解元组来引用每个元组及其相关长度,然后打印出元组列表中的每个元素,但 python 不接受这一点。我是 Comp sci 专业的,但大约 10 年前,我们学习了 C++ 和 Java,所以对 python 还是很陌生:

q = 0    
productResourcePairs = [(x, y) for x in [1,2,3] for y in [3,1,4]]
    for p in productResourcePairs:
        for i in range(len(productResourcePairs(p))):
             print(productResourcePairs[q][i])
        q = q + 1

我只是想获取每个元组的长度,然后使用 [][] 打印出它的对应值,然后移动到下一个元组。

Python 抛出以下错误:

Traceback(最近一次调用最后一次):for i in range(len(productResourcePairs(p))): TypeError: 'list' object is not callable

它现在正在工作,只需注意修复程序就会关闭它,并且底部调用对元组产生相同的结果:

for p in productResourcePairs:

    for i in range(len(p)):
        print(p[i])
        print(productResourcePairs[q][i])
    q = q + 1

标签: pythonpython-3.x

解决方案


()是呼叫操作员,因此productResourcePairs(p)尝试呼叫您的列表 - 这是没有意义的,因为列表不可调用。productResourcePairs[p]正在尝试获取p列表索引处的元素-但这里p是 a tuple,而不是 an int,并且您显然不能用元组索引列表。

现在我不确定您要做什么,但是如果目标是打印列表中每个元组的每个元素,那么您会使事情变得比必须的复杂得多:

productResourcePairs = [(x, y) for x in [1,2,3] for y in [3,1,4]]
for p in productResourcePairs:
    for item in p:
        print(item)

我建议您完成完整的官方 Python 教程,它涵盖了所有这些要点。

编辑

如果您绝对坚持使用索引访问,即使它既不符合 Python 标准、无用复杂且效率低得多(对于上述用例),您当然仍然可以这样做:

productResourcePairs = [(x, y) for x in [1,2,3] for y in [3,1,4]]
for p in productResourcePairs:
    plen = len(p)
    for i in range(plen):
        print(item[i])

或者如果你想做得更糟:

productResourcePairs = [(x, y) for x in [1,2,3] for y in [3,1,4]]
llen = len(productResourcePairs) 
for i in range(llen):
    plen = len(productResourcePairs[i])
    for j in range(plen):
        print(productResourcePairs[i][j])

请注意,任何实验过的 Python 用户如果在他们正在处理的代码库中找到这个代码,他们会立即用我的第一个代码段替换这个代码。


推荐阅读