使用 for 循环比较来自两个列表/元组的元素(在递归中)
Posted
技术标签:
【中文标题】使用 for 循环比较来自两个列表/元组的元素(在递归中)【英文标题】:Comparing elements from two lists/tuples with a for loop (in a recursion) 【发布时间】:2022-01-19 19:36:37 【问题描述】:这实际上是一个更长的递归的一部分,但我只是想弄清楚我是否写错了这一行:
for i in range(len(colors):
if colors[i][j] == new_pfx[-1][j] for j in range(1, len(colors[i])):
continue
else:
(there is an append here)
基本上:
“new_pfx”是我递归附加元组的列表(元组长度在整个递归过程中保持不变,但代码必须适用于任何长度) “colors”是另一个元组列表(同样,长度相同)我想要做的是: 从追加(使用“继续”)中排除“颜色”中的每个元组,其中其中的元素(不包括第一个和最后一个)等于来自“new_pfx”的最后一个元组中具有相同索引的元素。
我的语法错了吗?
我很难发布我的结果,因为这是一个更大的计划的一部分,我在这篇文章中对其进行了简化。希望我说清楚了,非常感谢您的帮助!
【问题讨论】:
你应该使用any()
函数:if any(colors[i][j] ...)
【参考方案1】:
您不能将生成器单独用作布尔值。我想你想要的是any
:
if any(colors[i][j] == new_pfx[-1][j] for j in range(1, len(colors[i])-1)):
(请注意,如果要排除最后一个元素以及第一个元素,则需要range(1, len(colors[i])-1)
)
您还可以通过直接迭代列表而不是使用i
和j
索引来更简单地完成整个循环:
for color in colors:
if any(c == n for c, n in zip(color[1:-1], new_pfx[-1][1:-1])):
continue
# there is an append here, using color instead of colors[i]
【讨论】:
以上是关于使用 for 循环比较来自两个列表/元组的元素(在递归中)的主要内容,如果未能解决你的问题,请参考以下文章