如何在Python中迭代不同长度的字符串元组列表



我正在尝试迭代一个长度不同的元组列表。然而,我只是想弄清楚一些事情

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",)

最新更新