【问题标题】:iterate over tuple list comprehension using indeces使用索引迭代元组列表理解
【发布时间】:2020-02-06 06:38:12
【问题描述】:

我正在尝试使用索引来迭代列表理解元组以引用每个元组及其相关长度,然后打印出元组列表中的每个元素,但 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(最近一次调用最后一次): 对于我在范围内(len(productResourcePairs(p))): TypeError: 'list' 对象不可调用

它现在正在工作,只需注意修复和底部调用就可以将其关闭,对于元组产生相同的结果:

for p in productResourcePairs:

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

【问题讨论】:

  • “python 不接受这个” - 在什么意义上?它会给出错误的结果,或者引发错误,或者陷入无限循环,还是其他什么?请编辑问题以提供完整的详细信息;见How to Askminimal reproducible example
  • 而不是 productResourcePairs(p) 也许你的意思是 productResourcePairs[p] ?括号用于调用函数,括号用于获取列表的元素。
  • 您能否举一个您希望看到的输出示例?
  • 我认为他的意思是for i in range(len(p))
  • 是的 pSgold 你是对的,它现在工作了,但为什么我不能在 len() 中引用 productResourcePairs(p) 的元组,如果 p 变量本身是由 for 定义的元组循环?

标签: python python-3.x


【解决方案1】:

() 是呼叫操作员,因此 productResourcePairs(p) 正在尝试呼叫您的列表 - 这没有任何意义,因为列表不可调用。 productResourcePairs[p] 正在尝试获取列表的索引 p 处的元素 - 但这里 ptuple,而不是 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 用户如果在他们正在处理的代码库中找到这个代码,他们会立即用我的第一个 sn-p 替换这个代码。

【讨论】:

  • 我在上面解释了我想要做的事情,请在发表评论之前完整阅读我的问题。其次,在我的编程经验中,必须能够访问列表的所有元素,如果我需要专门更改它,只需打印元组 (x,y) 并不能让我访问 y,因此是迭代的基础元组的长度。
【解决方案2】:

这是正确的代码:

for p in productResourcePairs:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 2018-09-21
    • 2010-09-12
    • 2012-03-20
    • 1970-01-01
    • 2013-01-30
    相关资源
    最近更新 更多