请帮助我理解以下代码片段:-
def any(l):
"whether any number is known from list l"
s = set(list(l)[0])
for x in l:
s.intersection_update(set(x))
return len(s) > 0这里l是一个包含三个元组的列表,例如(17,14,13),(19,17,2),(22,11,7),(22,13,1),(23,10,5),(23,11,2),(25,5,2)等等。
s=set(list(l)[0])发布于 2012-06-26 17:54:24
set(list(l)[0])list(l)从l中创建一个新列表,然后[0]将获取它的第一个项,即(17,14,13)。然后set((17,14,13))返回这组元组。set是一种数据结构,它只包含唯一的可散列元素.即set((10,12,10))等于{10,12}
>>> l=[(17,14,13),(19,17,2),(22,11,7),(22,13,1),(23,10,5),(23,11,2),(25,5,2)]
>>> list(l)[0]
(17, 14, 13)
>>> set(list(l)[0])
{17, 13, 14}发布于 2012-06-26 17:57:15
在s=set(list(l)[0])中,您将从列表的第一个元素创建一个集合。在您的例子中,您可以使用set(l[0]),它也会做同样的事情。本质上,您正在创建一个基于列表的第一个元组的集合。总的来说,您的函数试图在所有元组之间找到任何公共元素(数字)。
发布于 2012-06-26 17:55:46
set是一个可连接的python集合,它具有集合中任何实体都不能重复的特殊特性(从它的__hash__魔术方法返回的散列,因此来自__eq__方法的布尔返回不能等于列表中的任何其他实体),它用于任何需要集合而不能有重复实体的地方。
在不知道代码片段使用的上下文的情况下,很难完全判断代码片段的意图,特别是因为您为l拥有的值都是容器列表中的元组。intersection_update是一个集合的方法,它从原来的集合返回一个集合,只保留作为参数传递的元素中的元素。零索引键正在从列表中获取第一个元组。
http://docs.python.org/library/sets.html
https://stackoverflow.com/questions/11213098
复制相似问题