Python:列表理解中元组和列表的迭代有什么不同?
我的目标是:理解为什么以下函数“change”对于输入“list of single tuple”和“tuple of single tuple”的行为不同 我在另一个程序中使用了“change”中的列表理解,并惊讶地发现这两个输入行为不同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
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)的计算结果不是元组。。。然后我意识到这意味着,为了人类的可读性,你在括号里放的所有东西都会变成一个元组,并回答了我自己的问题。没错,()
那里告诉你,嘿,你在那里,这可能是一个元组!谢谢本例中的元组语法不是我所期望的,感谢您为我澄清了这一点!谢谢本例中的元组语法不是我所期望的,感谢您为我澄清了这一点!