Python 给定一组iterable和一个名称(字符串),返回一组与给定的;名称“;
给定一个名称(作为字符串)和一个包含两个名称(作为字符串)的集合的iterable,返回一个新集合,该集合由与给定名称共享一个集合的名称组成 例如:Python 给定一组iterable和一个名称(字符串),返回一组与给定的;名称“;,python,set,Python,Set,给定一个名称(作为字符串)和一个包含两个名称(作为字符串)的集合的iterable,返回一个新集合,该集合由与给定名称共享一个集合的名称组成 例如: itr = ({"a", "b"}, {"b", "c"}, {"c", "a"}) name = "a" newset = {"b", "c"} 我正在寻找一种类似蟒蛇的方法来解决这个问题。这就是我目前的困境: def friends(itr, name): newset = [] for i in itr:
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和编程比较陌生。多谢各位
>>> set(e for s in itr for e in s if name in s) - set((name,))
set(['c', 'b'])
名称的集合
>>> filtered_sets = (item - {name} for item in itr if name in item)
名称
>>> {item for items in filtered_sets for item in items if name != item}
{'b', 'c'}
名称的集合
>>> filtered_sets = (item - {name} for item in itr if name in item)
名称
>>> {item for items in filtered_sets for item in items if name != item}
{'b', 'c'}
您的逻辑很好,但解决方案很混乱,正如您所说:
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,))
您的逻辑很好,但解决方案很混乱,正如您所说:
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,))
那代码似乎工作得很好,有什么问题吗?是的,代码是可以工作的,但是我希望代码能工作得更完美一些,有什么问题吗?是的,代码是有效的,但是我希望有更“pythonic”的东西。我喜欢用有意义的方式命名变量。我喜欢用有意义的方式命名变量。注意,这会给不是单字符字符串的
name
s带来麻烦。谢谢@IgnacioVazquez Abrams,已修复。请注意,这将使非1个字符字符串的name
s陷入混乱。感谢@IgnacioVazquez Abrams,已修复。set(如果name in x and y!=name,则在itr中y代表y in x)
使我认为这更简单set(如果name in x and y!=name,则在itr中y代表y in x)
使我认为这更简单