如何根据条件将一组元素分成另外两组?

How to separate the elements from one set into two other sets based on a condition?

我有一组包含以 A 或以 B 开头的名称。我想将这些名称分成两组,一组包含以 A 开头的名称,另一组包含以 B 开头的名称。有人能告诉我解决方法吗这个?

这是我的代码

a = set()
b = set()
names = {'anand', 'bianca', 'benjamin', 'ayesha', 'brian', 'adarsh'}
print(names)

for ele in names:
      if ele == "a":
           a.add(ele)
      else:
           b.add(ele)

print("Set a contains : ", a)
print("Set b contains : ", b)

假设单词以 a 或 b 开头:

names = {'anand', 'bianca', 'benjamin', 'ayesha', 'brian', 'adarsh'}
a = set(filter(lambda x: x.startswith('a'), names))
b = names.difference(a)

如果还有其他可能:

names = {'anand', 'bianca', 'benjamin', 'ayesha', 'brian', 'adarsh'}
a = set(filter(lambda x: x.startswith('a'), names))
b = set(filter(lambda x: x.startswith('b'), names))

输出:

>>> a
{'adarsh', 'anand', 'ayesha'}
>>> b
{'benjamin', 'bianca', 'brian'}

注意。这要求集合的元素是字符串,否则你需要先检查类型

原因是您只是在检查 ele == a 而您应该检查 ele 是否以 a 开头,如下所示:

a = set()
b = set()
names = {'anand', 'bianca', 'benjamin', 'ayesha', 'brian', 'adarsh'}
print(names)

for ele in names:
      if ele.startswith("a"):
           a.add(ele)
      elif ele.startswith("b"):
           b.add(ele)

print("Set a contains : ", a)
print("Set b contains : ", b)

输出:

{'anand', 'bianca', 'benjamin', 'brian', 'adarsh', 'ayesha'}
Set a contains :  {'anand', 'adarsh', 'ayesha'}
Set b contains :  {'brian', 'benjamin', 'bianca'}

这是使用 itertools.groupby 的替代方法。输出是一个字典,而不是单独的变量:

from itertools import groupby
{k:set(v) for k,v in groupby(sorted(names), lambda x: x[:1])}

输出:

{'a': {'adarsh', 'anand', 'ayesha'}, 'b': {'benjamin', 'bianca', 'brian'}}

注意。我不确定 sorted 这一步是否必要