2024-06-26 14:06:24 发布
网友
我正在尝试使用^{},但它对我无效:
>>> names = ["Rhonda", "Ryan", "Red Rackham", "Paul"] >>> all([name for name in names if name[0] == "R"]) True >>>
我试图检查是否所有的名字都以"R"开头,即使我将"Paul"添加到names,但all()仍然返回True。如何修复此问题,使all()返回False,直到"Paul"被删除?你知道吗
"R"
"Paul"
names
all()
True
False
names = ["Rhonda", "Ryan", "Red Rackham", "Paul"] if all(c[0] == "R" for c in names): print "ALL MATCH"
演示:
http://ideone.com/KenqJl
你误解了all的工作原理。从docs:
all
all(iterable)Return True if all elements of the iterable are true (or if the iterable is empty).
all(iterable)
Return True if all elements of the iterable are true (or if the iterable is empty).
iterable
在代码中,首先将以R开头的所有名称收集到一个列表中,然后将该列表传递给all。这样做将始终返回True,因为非空字符串的值为True。你知道吗
R
相反,你应该写:
all(name[0] == "R" for name in names)
这将把一个布尔数传递给all。如果它们都是True,函数将返回True;否则,它将返回False。你知道吗
作为额外的好处,结果现在将被延迟计算,因为我们使用了generator expression而不是列表理解。使用列表理解,代码需要在确定结果之前测试所有字符串。然而,新代码将只检查必要的数量。你知道吗
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
演示:
http://ideone.com/KenqJl
你误解了
all
的工作原理。从docs:在代码中,首先将以
R
开头的所有名称收集到一个列表中,然后将该列表传递给all
。这样做将始终返回True
,因为非空字符串的值为True
。你知道吗相反,你应该写:
这将把一个布尔数传递给
all
。如果它们都是True
,函数将返回True
;否则,它将返回False
。你知道吗作为额外的好处,结果现在将被延迟计算,因为我们使用了generator expression而不是列表理解。使用列表理解,代码需要在确定结果之前测试所有字符串。然而,新代码将只检查必要的数量。你知道吗
相关问题 更多 >
编程相关推荐