如何根据条件将一组元素分成另外两组?
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
这一步是否必要
我有一组包含以 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
这一步是否必要