代码之家  ›  专栏  ›  技术社区  ›  Am1rr3zA

用python生成器填充Print set()项

  •  2
  • Am1rr3zA  · 技术社区  · 15 年前

    foundUnique = set()
    def unique_items(myList, index, clearFlag): 
        for item in myList:
            if clearFlag is True:
                foundUnique.clear()
                clearFlag = False
            if item[index] not in foundUnique:
                yield item
                foundUnique.add(item[index])
    

    我正在使用这个“唯一”项目来获得一个唯一的列表:

    senderDupSend = unique_items(ip, 4, True)
    

    现在我希望我的集合是可访问的(我可以打印它的元素或对特定元素做一些更改…),但是当我写:

    for item in foundUnique:
        print item
    

    它什么都没印!

    但如果我写:

    for item in senderDupSend:
        print item
    for item in foundUnique:
        print item
    

    它打印所有找到的唯一项目。

    1 回复  |  直到 7 年前
        1
  •  3
  •   aaronasterling    15 年前

    问题是 unique_items 是一个发电机

    senderDupSend = unique_items(ip, 4, True)
    

    for item in foundUnique:
        print item
    

    发电机还没有实际运行,所以 foundUnique 仍然是空的。

    当你以后继续做的时候

    for item in senderDupSend: # This is what actually fills the list.
        print item
    for item in foundUnique:
        print item
    


    似乎您要做的是构造一个集合,该集合具有从某个序列的每个元素获取的相同索引。你可以很容易地做到这一点:

    found_unique = set(item[index] for item in sequence)
    

    found_unique = set(item[4] for item in ip)
    

    如果以后要扩展集合以包含其他项,可以执行以下操作

    found_unique.union(item[4] for item in other_ip_list)