从 python 中的集合中检索所有最小的字符串
retrieve all the smallest strings from a set in python
我有一套看起来像
set(['A', 'BF', 'B', 'BA', 'ABF', 'AF', 'F', 'BFA', 'AFB', 'BAF', 'FA', 'FB', 'AB', 'FAB', 'FBA'])
我正在尝试将所有长度最小的字符串放入列表中
我尝试使用
print min((element for element in getParts(working_scheme,k)), key=len)
只打印 A
但我需要 ['A', 'B', 'F']
我怎样才能完成这个?
min()
只会检索 一个 结果。
如果您想检索 所有 个最短的结果,您必须自己编写代码:
shortest = []
shortest_length = float('inf')
for element in getParts(working_scheme, k):
if len(element) < shortest_length:
shortest = [element]
shortest_length = len(element)
elif len(element) == shortest_length:
shortest.append(element)
这只在集合上循环一次。
类似
>>> a_set = set(['A', 'BF', 'B', 'BA', 'ABF', 'AF', 'F', 'BFA', 'AFB', 'BAF', 'FA', 'FB', 'AB', 'FAB', 'FBA'])
>>> min_len = min( len(x) for x in a_set )
>>> [ x for x in a_set if len(x) == min_len ]
['A', 'B', 'F']
拆分
min_len = min( [ len(x) for x in a_set ] )
returns 长度的最小值。
[ x for x in a_set if len(x) == min_len ]
List comprehension, returns 长度等于 min_len
的元素列表
data = set(['A', 'BF', 'B', 'BA', 'ABF', 'AF', 'F', 'BFA', 'AFB', 'BAF', 'FA', 'FB', 'AB', 'FAB', 'FBA'])
_len = len(sorted(data, key=len)[0])
print filter(lambda x:len(x)==_len, data)
Returns:
['A', 'B', 'F']
另一种使用字典的方法:
from collections import defaultdict
items = set(['A', 'BF', 'B', 'BA', 'ABF', 'AF', 'F', 'BFA', 'AFB', 'BAF', 'FA', 'FB', 'AB', 'FAB', 'FBA'])
d = defaultdict(list)
for item in items:
d[len(item)].append(item)
results = d[min(d)]
结果:
['A'、'B'、'F']
我有一套看起来像
set(['A', 'BF', 'B', 'BA', 'ABF', 'AF', 'F', 'BFA', 'AFB', 'BAF', 'FA', 'FB', 'AB', 'FAB', 'FBA'])
我正在尝试将所有长度最小的字符串放入列表中 我尝试使用
print min((element for element in getParts(working_scheme,k)), key=len)
只打印 A
但我需要 ['A', 'B', 'F']
我怎样才能完成这个?
min()
只会检索 一个 结果。
如果您想检索 所有 个最短的结果,您必须自己编写代码:
shortest = []
shortest_length = float('inf')
for element in getParts(working_scheme, k):
if len(element) < shortest_length:
shortest = [element]
shortest_length = len(element)
elif len(element) == shortest_length:
shortest.append(element)
这只在集合上循环一次。
类似
>>> a_set = set(['A', 'BF', 'B', 'BA', 'ABF', 'AF', 'F', 'BFA', 'AFB', 'BAF', 'FA', 'FB', 'AB', 'FAB', 'FBA'])
>>> min_len = min( len(x) for x in a_set )
>>> [ x for x in a_set if len(x) == min_len ]
['A', 'B', 'F']
拆分
min_len = min( [ len(x) for x in a_set ] )
returns 长度的最小值。[ x for x in a_set if len(x) == min_len ]
List comprehension, returns 长度等于min_len
的元素列表
data = set(['A', 'BF', 'B', 'BA', 'ABF', 'AF', 'F', 'BFA', 'AFB', 'BAF', 'FA', 'FB', 'AB', 'FAB', 'FBA'])
_len = len(sorted(data, key=len)[0])
print filter(lambda x:len(x)==_len, data)
Returns:
['A', 'B', 'F']
另一种使用字典的方法:
from collections import defaultdict
items = set(['A', 'BF', 'B', 'BA', 'ABF', 'AF', 'F', 'BFA', 'AFB', 'BAF', 'FA', 'FB', 'AB', 'FAB', 'FBA'])
d = defaultdict(list)
for item in items:
d[len(item)].append(item)
results = d[min(d)]
结果: ['A'、'B'、'F']