Python:列表理解中元组和列表的迭代有什么不同?

Python:列表理解中元组和列表的迭代有什么不同?,python,python-3.x,list,tuples,list-comprehension,Python,Python 3.x,List,Tuples,List Comprehension,我的目标是:理解为什么以下函数“change”对于输入“list of single tuple”和“tuple of single tuple”的行为不同 我在另一个程序中使用了“change”中的列表理解,并惊讶地发现这两个输入行为不同 def change(entries): return ['\t'.join(entry) for entry in entries] entry_tuple_list = [('val1', 'val2')] print(change(entry

我的目标是:理解为什么以下函数“change”对于输入“list of single tuple”和“tuple of single tuple”的行为不同

我在另一个程序中使用了“change”中的列表理解,并惊讶地发现这两个输入行为不同

def change(entries):
    return ['\t'.join(entry) for entry in entries]

entry_tuple_list = [('val1', 'val2')]
print(change(entry_tuple_list)) #Evaluates to ['val1\tval2']

entry_tuple_tuple = (('val1', 'val2')) 
print(change(entry_tuple_tuple)) #Evaluates to ['v\ta\tl\t1', 'v\ta\tl\t2']

expected_result = ['val1\tval2']
我本来希望在函数中显示相同的行为,并变成
['val1\tval2']
预期结果

正如您在代码注释中看到的那样,情况并非如此。
为什么这两个输入会导致不同的输出?

因为您的
条目\u tuple\u tuple=(('val1','val2'))
不是元组的元组。要让python知道您想要一个单元素元组,请插入一个逗号,即将该行更改为
entry\u tuple\u tuple=(('val1','val2'),)
将产生预期的结果


目前,它只是拾取一个具有两个值的元组。您的理解是迭代这两个值中的每个字符。

因为您的
条目\u tuple\u tuple=(('val1','val2'))
不是一个元组。要让python知道您想要一个单元素元组,请插入一个逗号,即将该行更改为
entry\u tuple\u tuple=(('val1','val2'),)
将产生预期的结果

目前,它只是拾取一个具有两个值的元组。您的理解是对这两个值中的每个字符进行迭代。

拥有此
(())
并不意味着您拥有
2个元组。让我们了解这里发生了什么:

entry\u tuple\u tuple[0]
将输出
val1

而此
条目\u元组\u列表[0]
将输出
('val1','val2')

那么这里怎么了?实际上,在python中,如果您想要一个元组,那么您应该有

例如,在这里,
a=(12)
是一个整数,而不是您所期望的元组。要使它成为一个元组,您可以这样做
a=12,
。现在
a
是一个元组,猜猜看!你甚至不需要
()

要解决您的问题,只需添加
,如下所示:
entry\u tuple\u tuple=(('val1','val2'),)
。这应该可以得到你想要的嵌套元组。我希望你现在就明白了。

拥有这个
(())
并不意味着你拥有
2个元组。让我们了解这里发生了什么:

entry\u tuple\u tuple[0]
将输出
val1

而此
条目\u元组\u列表[0]
将输出
('val1','val2')

那么这里怎么了?实际上,在python中,如果您想要一个元组,那么您应该有

例如,在这里,
a=(12)
是一个整数,而不是您所期望的元组。要使它成为一个元组,您可以这样做
a=12,
。现在
a
是一个元组,猜猜看!你甚至不需要
()


要解决您的问题,只需添加
,如下所示:
entry\u tuple\u tuple=(('val1','val2'),)
。这应该可以得到你想要的嵌套元组。我希望你现在就明白了。

否则它不是一个元组。否则就不是元组了,谢谢!我没有意识到元组语法可能会有那么棘手,这就清楚了。我想问你是否知道为什么a=(12)的计算结果不是元组。。。然后我意识到这意味着,为了人类的可读性,你在括号里放的所有东西都会变成一个元组,并回答了我自己的问题。没错,
()
那里告诉你,嘿,你在那里,这可能是一个元组!谢谢我没有意识到元组语法可能会有那么棘手,这就清楚了。我想问你是否知道为什么a=(12)的计算结果不是元组。。。然后我意识到这意味着,为了人类的可读性,你在括号里放的所有东西都会变成一个元组,并回答了我自己的问题。没错,
()
那里告诉你,嘿,你在那里,这可能是一个元组!谢谢本例中的元组语法不是我所期望的,感谢您为我澄清了这一点!谢谢本例中的元组语法不是我所期望的,感谢您为我澄清了这一点!