Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用all()内置函数?_Python_Python 2.7_Python 2.x - Fatal编程技术网

Python 如何使用all()内置函数?

Python 如何使用all()内置函数?,python,python-2.7,python-2.x,Python,Python 2.7,Python 2.x,我正在尝试使用,但它对我无效: >>> names = ["Rhonda", "Ryan", "Red Rackham", "Paul"] >>> all([name for name in names if name[0] == "R"]) True >>> 我试图检查所有名称是否都以“R”开头,即使我在名称中添加了“Paul”,all()仍然返回True。如何修复此问题,使all()返回False,直到“Paul”被删除?您误解了al

我正在尝试使用,但它对我无效:

>>> names = ["Rhonda", "Ryan", "Red Rackham", "Paul"]
>>> all([name for name in names if name[0] == "R"])
True
>>> 

我试图检查所有名称是否都以
“R”
开头,即使我在
名称中添加了
“Paul”
all()
仍然返回
True
。如何修复此问题,使
all()
返回
False
,直到
“Paul”
被删除?

您误解了
all
的工作原理。从:

all(可编辑)

如果
iterable
的所有元素均为True(或者如果
iterable
为空)

在代码中,首先将以
R
开头的所有名称收集到一个列表中,然后将该列表传递给
all
。执行此操作将始终返回
True
,因为非空字符串的计算结果为
True


相反,你应该写:

all(name[0] == "R" for name in names)
这将把布尔数的iterable传递给
all
。如果全部为
True
,则函数将返回
True
;否则,它将返回
False


作为一个额外的好处,现在将延迟计算结果,因为我们使用了一个而不是一个列表。使用列表理解,代码需要在确定结果之前测试所有字符串。然而,新代码将只检查必要的数量

您得到错误结果的原因是,您已经通过应用所需的条件,使用列表理解创建了一个新列表,因此,如果我们进行一些细分,那么:

names = ["Rhonda", "Ryan", "Red Rackham", "Paul"]
print all(map(lambda name: name[0] == "R", names))
# prints False
names = ["Rhonda", "Ryan", "Red Rackham"]
print all(map(lambda name: name[0] == "R", names))
# prints True
>>> print [name for name in names if name[0] == "R"]
>>> ['Rhonda', 'Ryan', 'Red Rackham']
>>> print all(['Rhonda', 'Ryan', 'Red Rackham'])
>>> True
因此,正确的方法可能是:

names = ["Rhonda", "Ryan", "Red Rackham", "Paul"]

res = all(map(lambda x : x[0]=="R", names))
# map() returns: [True, True, True, False] 
# all([True, True, True, False]) == False
print res

演示:


您期望的是什么?旁白:字符串有一个
startswith
方法,因此
name.startswith(“R”)
也可以工作。
如果全部(c[0]==“R”表示名称中的c):
谢谢!我试图在
all
:)中添加一个评估列表
names = ["Rhonda", "Ryan", "Red Rackham", "Paul"]
if all(c[0] == "R" for c in names):
    print "ALL MATCH"