理解python代码片段

时间:2012-06-26 17:49:13

标签: python code-snippets

请帮助我理解以下代码段: -

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

这里是一个包含3元组列表的列表,例如[(17,14,13),(19,17,2),(22,11,7),(22) ,13,1),(23,10,5),(23,11,2),(25,5,2)]等。 特别是我很难理解第3行

s=set(list(l)[0])

3 个答案:

答案 0 :(得分:2)

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}

答案 1 :(得分:2)

s=set(list(l)[0])中,您将从列表的第一个元素创建一个集合。在你的情况下,你可以使用set(l[0]),它会做同样的事情。基本上,您正在基于列表的第一个元组创建一个集合。总的来说,你的函数试图找出所有元组之间是否存在任何共同元素(数字)。

答案 2 :(得分:0)

set是可散列类型的python集合,它具有特殊功能,集合中的任何实体都不能重复(从它的__hash__魔术方法返回的散列,从而也是布尔返回来自__eq__方法不能等于列表中的任何其他实体。它用于需要不能重复实体的集合的任何地方。

很难在不知道其使用的上下文的情况下完全告诉代码段的意图,特别是因为你拥有的l值是容器列表中的所有元组。 intersection_update是一个集合的方法,它返回原始的集合,仅保留在作为参数传递的元素中找到的元素。零索引键从列表中获取第一个元组。

http://docs.python.org/library/sets.html