字符串到元组对的Python列表

2024-04-26 22:57:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难想出一种有效的方法来获取字符串列表并将其转换为元组对。我有一个类似的清单:

listOfNames = ['red-l','blue-l','green-s','red-s','blue-s']

本例中的每种颜色(红色、蓝色和绿色)都有'-l'或'-s'条目,或两者都有。我需要将字符串列表转换为元组对,例如:

^{pr2}$

我认为需要正则表达式,但我不知道该怎么做。非常感谢任何帮助。谢谢


Tags: 方法字符串列表颜色条目greenbluered
3条回答

我编写了这个函数,它远不是完美的,但它提供了您希望的结果:

  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

结果如下:

^{pr2}$
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]

输出:

^{pr2}$

由于将元素拆分为两个单独的列表,这将比其他方法稍快一些,因此查找速度更快。在

一种可能的解决方案,我们可以先对列表进行排序,然后根据每个项的颜色部分进行分组,然后将每个组转换为一个元组,如果它只包含一个元素,则在元组中插入一个None:

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')]

相关问题 更多 >