给定一个iterable集合和一个名称(字符串),返回一组与给定“name”连接的名称

2024-04-24 10:10:33 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个名称(作为字符串)和一个包含两个名称(作为字符串)的集合的iterable,返回一个新的集合,该集合由与给定名称共享一个集合的名称组成。你知道吗

例如:

 itr = ({"a", "b"}, {"b", "c"}, {"c", "a"})
 name = "a"
 newset = {"b", "c"}

我在寻找一种解决这个问题的方法。这就是我目前的困境:

def friends(itr, name):
    newset = []
    for i in itr:
        if name in i:
            for j in i:
                if j != name:
                    newset.append(j)
    return set(newset)

任何帮助都将不胜感激。一般来说,我对Python和编程比较陌生。谢谢


Tags: 方法字符串namein名称forreturnif
3条回答
>>> reduce(set.union, filter(lambda x: name in x, itr), set()) - set((name,))
set(['c', 'b'])

你的逻辑是好的,但解决方案是混乱的,正如你所说:

def friends(itr, name):
    newset = [] # Your should probably make this a set
    for i in itr:
        if name in i:
            for j in i: # This loops is really not necessary 
                if j != name: 
                    newset.append(j)
    return set(newset)

您的代码可以更改为这样的内容,而无需任何花哨的工具:

def friends(itr, name):
    newset = set()
    for subset in itr:
        if name in subset:
            newset.update(subset)
    return newset.difference((name,))
>>> set(e for s in itr for e in s if name in s) - set((name,))
set(['c', 'b'])

相关问题 更多 >