Python 为什么在列表中拆分返回元素会返回一个空括号?

Python 为什么在列表中拆分返回元素会返回一个空括号?,python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,根据“拆分一个空字符串或一个只包含空格且带有None分隔符的字符串将返回[]。” 然而,有趣的是: >>> [i for i in input().split()] 1 2 ['1', '2'] 这使我们推断,在原始示例中创建空列表的None不是拆分本身的结果,也不是input(),而是列表理解的结果。 我阅读了所有的理解列表,但没有给出答案 您正在对字符串进行迭代;与对字符串调用list()类似,迭代生成单个字符: 然后将str.split()应用于每个字符: >&g

根据“拆分一个空字符串或一个只包含空格且带有None分隔符的字符串将返回[]。”

然而,有趣的是:

>>> [i for i in input().split()]
1 2
['1', '2']
这使我们推断,在原始示例中创建空列表的None不是拆分本身的结果,也不是input(),而是列表理解的结果。


我阅读了所有的理解列表,但没有给出答案

您正在对字符串进行迭代;与对字符串调用
list()
类似,迭代生成单个字符:

然后将
str.split()
应用于每个字符:

>>> '1'.split()
['1']
>>> ' '.split()
[]
>>> '2'.split()
['2']
中间的字符是一个空格,因此
str.split()
的行为与广告中的完全相同

你根本不需要一个列表。只需拆分
input()
返回的字符串:

您的第二个示例所做的就是循环该
str.split()
调用生成的列表,并逐个重复这些元素:

>>> [i for i in ['1', '2']]
['1', '2']

您正在对字符串进行迭代;与对字符串调用
list()
类似,迭代生成单个字符:

然后将
str.split()
应用于每个字符:

>>> '1'.split()
['1']
>>> ' '.split()
[]
>>> '2'.split()
['2']
中间的字符是一个空格,因此
str.split()
的行为与广告中的完全相同

你根本不需要一个列表。只需拆分
input()
返回的字符串:

您的第二个示例所做的就是循环该
str.split()
调用生成的列表,并逐个重复这些元素:

>>> [i for i in ['1', '2']]
['1', '2']

这与列表理解无关。您正在迭代不同的对象类型并与之交互


在第一个示例中,您正在迭代字符串,
'12'
,因此元素是
['1',''2']
。只有这样,您才能拆分它们,并返回指定的输出。查看显示的文档,我们现在知道为什么在第一个示例中返回空列表

>>> [c for c in '1 2']
['1', ' ', '2']

但是,在第二个示例中,您正在迭代
input().split()
,这是一个列表。这可以正常工作,因为
'12'
不是空字符串。因此,
.split()
返回元素列表,默认情况下在空白处拆分

>>> '1 2'.split()
>>> ['1', '2']

这与列表理解无关。您正在迭代不同的对象类型并与之交互


在第一个示例中,您正在迭代字符串,
'12'
,因此元素是
['1',''2']
。只有这样,您才能拆分它们,并返回指定的输出。查看显示的文档,我们现在知道为什么在第一个示例中返回空列表

>>> [c for c in '1 2']
['1', ' ', '2']

但是,在第二个示例中,您正在迭代
input().split()
,这是一个列表。这可以正常工作,因为
'12'
不是空字符串。因此,
.split()
返回元素列表,默认情况下在空白处拆分

>>> '1 2'.split()
>>> ['1', '2']

这与列表理解无关。您正在迭代并与不同的对象交互。为了详细说明@AlexThornton所说的内容,第一种情况是字符串,第二种情况是列表。这与列表理解无关。您正在迭代并与不同的对象交互。为了详细说明@AlexThornton所说的内容,第一种情况是字符串,第二种情况是列表。