代码之家  ›  专栏  ›  技术社区  ›  Alec

将元组列表转换为该列表中使用的所有整数的列表

  •  0
  • Alec  · 技术社区  · 5 年前

    我想把它转换成

    [0, 2, 4, 5, 1]

    必须有一种比不断替换每个字符更快的方法:

    strfp1 = re.sub('\(','',str(factor_pairs)); strfp2 = re.sub('\)','',strfp1); strfp3 = re.sub('\[','',strfp2); strfp4 = re.sub(']','',strfp3); strfp5 = re.sub(',','',strfp4); strfp6 = re.sub(' ','',strfp5)
    factor_numbers = [int(i) for i in set(strfp6)]
    

    然而,我甚至找不到一种方法来同时替换多个不相邻的字符。我错过了什么明显的东西吗?

    2 回复  |  直到 5 年前
        1
  •  1
  •   iz_    5 年前

    如果您想使用替换方法,确实有一种简单的方法:

    import re
    factor_pairs = [(100, 1), (50, 2), (25, 4), (20, 5), (10, 10)]
    s = re.sub(r'[\[\]\(\), ]', '', str(factor_pairs))
    factor_numbers = [int(i) for i in set(s)]
    

    外部字符中指定的任何字符 [] 的将被替换。

        2
  •  0
  •   Austin    5 年前

    如果顺序不一定重要,则可以使用集合:

    from itertools import chain
    
    lst = [(100, 1), (50, 2), (25, 4), (20, 5), (10, 10)]
    
    flst = map(lambda x: str(x), chain.from_iterable(lst))
    
    s = set()
    for x in flst:
        for i in x:
            s.add(i)
    
    print(s)
    # {'2', '1', '0', '5', '4'}
    

    如果顺序很重要,请使用列表:

    from itertools import chain
    
    lst = [(100, 1), (50, 2), (25, 4), (20, 5), (10, 10)]
    
    flst = map(lambda x: str(x), chain.from_iterable(lst))
    
    s = []
    for x in flst:
        for i in x:
            if i not in s:
                s.append(i)
    
    print(s)
    # ['1', '0', '5', '2', '4']