我正在http://docs.python.org/2/library/functions.html
阅读过滤器()文档。我不太明白下面显示的filter()函数产生的结果的细微差别。我试图让p& q列出尽可能相似的内容,以增强这种微妙的差异。
>>> p = ("A", "e", "I", "o", "U", "o")
>>> filter(lambda x: x not in ["e", "o"], p)
('A', 'I', 'U')
>>> q = ("Z", "o")
>>> filter(lambda x: x not in ["e", "o"], q)
('Z',)
有人可以向我解释一下吗?
答案 0 :(得分:4)
这是因为('Z',)
是一个元组,而('Z')
只是一个括在括号中的字符串。
print type(('Z',))
# <type 'tuple'>
print type(('Z'))
# <type 'str'>
当您说('Z')
时,Python认为它类似于(1 + 2)
。它只是评估其中的表达式。
但是当你在('Z',)
内放一个逗号时,它认为它是一个元组。
引自docs,
带括号的表达式列表产生表达式列表 yield:如果列表包含至少一个逗号,则产生一个元组; 否则,它产生组成的单个表达式 表达列表。
一对空括号产生一个空元组对象。以来 元组是不可变的,文字规则适用(即两个 空元组的出现可能会也可能不会产生相同的对象。)
请注意,元组不是由括号组成,而是由使用 逗号运算符。例外是空元组,为此 必须使用括号 - 允许在中使用无括号的“无” 表达式会导致含糊不清并允许常见的拼写错误传递 未捕获
答案 1 :(得分:2)
作为元组的属性,
>>> ('a','b',) == ('a','b')
True
>>> ('a',) == ('a')
False
>>> ('a') in ('a',)
True
你指定的第一个和第二个过滤器的类型(不是我的)和('a','b')和('a',)都是元组,因此('a')不是元组和只是str
>>> type(('a','b',))
<type 'tuple'>
>>> type(('a','b'))
<type 'tuple'>
>>> type(('a',))
<type 'tuple'>
>>> type(('a'))
<type 'str'>