如何在列表中理解分裂返回元素返回一个空括号?

时间:2014-04-04 19:00:38

标签: python python-3.x list-comprehension

根据the documentation“拆分空字符串或仅包含空格和无分隔符的字符串返回[]。”

>>> [i.split() for i in input()]
1 2
[['1'], [], ['2']]

然而,足够介意:

>>> [i for i in input().split()]
1 2
['1', '2']

这导致我们推断在原始示例中创建空列表的None不是分裂自身或input()的结果,而是列表理解。

我在列表理解上阅读了所有documentation,但没有找到答案。

2 个答案:

答案 0 :(得分:2)

你正在迭代一个字符串;比如在字符串上调用list(),迭代生成个别字符

>>> list('1 2')
['1', ' ', '2']
>>> [c for c in '1 2']
['1', ' ', '2']

然后,您将str.split()应用于每个角色:

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

中间字符是一个空格,因此str.split()表现为与广告完全

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

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

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

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

答案 1 :(得分:2)

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


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

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

但是在第二个示例中,您正在迭代input().split(),这是一个列表。这通常有效,因为'1 2'不是空字符串。因此,.split()会返回一个元素列表,默认情况下会在空白区域中分割。

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