我正在尝试迭代一个长度不同的元组列表。然而,我只是想弄清楚一些事情
test_list = [("rock", "paper", "scissors"),("go","fish"),("uno")]
for each_tuple in test_list:
for each_word in each_tuple:
print(each_word)
这将打印
rock
paper
scissors
go
fish
u
n
o
什么是我可以使用的解决方案,使得uno被打印为";uno";而不是像单独的字母那样。我理解为什么会发生这种情况,但我不确定我应该实现什么来";"检查";元组中是否只有单个元素,而不是多个元素。
这是Python语法中的一个细微区别。括号有多种用途,你会看到的大多数括号分为三类:(1(表达式括号,如改变算术的优先顺序;(2( 构造元组;(建造发电机(。
test_list = [("rock", "paper", "scissors"),("go","fish"),("uno")]
前两对括号有内部逗号:它们显然是元组。然而,第三个更容易作为一个简单的表达式,因此它的计算结果仅为字符串:
test_list = [("rock", "paper", "scissors"),("go","fish"),"uno"]
要获得所需内容,请使用一个简单逗号强制创建一个单元素元组:
test_list = [("rock", "paper", "scissors"),("go","fish"),("uno", )]
问题是您没有定义正确的元组。您的迭代很好。
但你有:
test_list = [("rock", "paper", "scissors"),("go","fish"),("uno")]
什么时候应该有:
test_list = [("rock", "paper", "scissors"),("go","fish"),("uno",)]
注意多余的逗号。没有它,括号包装";uno";被有效地忽略,并且";uno";该字符串成为迭代项,从而产生单个字符。
这只是在Python中指定单个元素元组的一个简单要求。
uno在您的场景中不是元组。要使其成为元组,请将其更改为:
test_list = [("rock", "paper", "scissors"),("go","fish"),("uno",)]
注意uno 后增加的彗差
对于最初的问题,您得到了很多不错的答案。另外,您可能有兴趣了解itertools
标准库中的chain
函数对于您正在执行的迭代类型非常方便,并且可能值得考虑。
示例:
from itertools import chain
test_list = [("rock", "paper", "scissors"),("go","fish"),("uno",)]
for each_word in chain.from_iterable(test_list):
print(each_word)
输出:
rock
paper
scissors
go
fish
uno
要实现所需的输出,只需在";uno";,像这样。
("uno",)