根据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,但没有找到答案。
答案 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']