def tupleofnames(listofnames):
result = []
colors = set([x[:-2] for x in listOfNames])
for c in colors:
if c+"-l" in listofnames:
if c+'-s' in listofnames:
result.append((c+"-l",c+'-s'))
else:
result.append((c+"-l",None))
else:
result.append((None,c+"-s"))
return result
listOfNames = ['red-l','blue-l','green-s','red-s','blue-s']
l_list = [a[:-2] for a in filter(lambda x:x[-1]=='l',listOfNames)]
s_list = [a[:-2] for a in filter(lambda x:x[-1]=='s',listOfNames)]
s = {a[:-2] for a in listOfNames}
tuplesOfNames = [tuple([c+'-l' if c in l_list else None,c+'-s' if c in s_list else None]) for c in s]
import re
from itertools import groupby
li = []
listOfNames.sort()
for k, g in groupby(listOfNames, lambda s: re.findall("(.*)-", s)):
liG = list(g)
if len(liG) == 1:
li.append((None, liG[0]))
else:
li.append(tuple(liG))
li
# [('blue-l', 'blue-s'), (None, 'green-s'), ('red-l', 'red-s')]
我编写了这个函数,它远不是完美的,但它提供了您希望的结果:
结果如下:
^{pr2}$输出:
^{pr2}$由于将元素拆分为两个单独的列表,这将比其他方法稍快一些,因此查找速度更快。在
一种可能的解决方案,我们可以先对列表进行排序,然后根据每个项的颜色部分进行分组,然后将每个组转换为一个元组,如果它只包含一个元素,则在元组中插入一个None:
相关问题 更多 >
编程相关推荐