【问题标题】:Convert list of strings to list of 2-tuples of integers (& Comma seperated in Tuple)将字符串列表转换为整数的 2 元组列表(以元组中的逗号分隔)
【发布时间】:2021-09-05 18:02:42
【问题描述】:

我需要将字符串列表转换为元组。 我的列表如下所示:

list = ['[11.  5.]', '[ 3. 16.]', '[ 0. 25.]', '[ 2. 40.]',

该列表由作为字符串的元组组成(不幸的是不是整数)。在元组内没有逗号分隔。尤其是和逗号的组合让我很沮丧。

我在这里找到了类似的解决方案,但不知何故我无法将逗号放入元组中: Convert list of strings to list of 2-tuples of integers

背景:该列表表示图像像素的 X 和 Y 坐标,我想将其变黑。像这样(第一行):

New_Image[list[0]] = 0

【问题讨论】:

    标签: python string list image tuples


    【解决方案1】:

    您可以使用正则表达式从列表项中捕获每个整数,然后从它们中形成元组,如下所示:

    import re
    ls= ['[11.  5.]', '[ 3. 16.]', '[ 0. 25.]', '[ 2. 40.]']
    
    n = re.findall(r'\d+', ''.join(ls))
    # -> ['11', '5', '3', '16', '0', '25', '2', '40']
    
    res = [tuple(map(int, [n[i], n[i + 1]])) for i in range(0, len(n) - 1, 2)]
    # -> [(11, 5), (3, 16), (0, 25), (2, 40)]
    

    【讨论】:

    • 感谢您的帮助,代码运行良好。作为@Sarvesh Shetty 建议的一个优势,它甚至可以处理科学记数法(1.022e+03 和类似)的数字。这不一定是必需的,但仍然很方便 :-) 谢谢@all =)
    【解决方案2】:

    我对句号“.”进行了拆分。在每一对上。 如果我们以第一对为例 '[11. 5.]',我在零索引中得到“[11”(sub.split(“.”)[0]),在第一个索引 sub.split(“.”)[1] 中得到“5”。 我对零索引中的方括号“[”进行了替换,并通过在两端添加圆括号将最终输出转换为元组。

        list = ['[11.  5.]', '[ 3. 16.]', '[ 0. 25.]', '[ 2. 40.]']
        
        new_list = [(int(sub.split(".")[0].replace("[","")),int(sub.split(".")[1]) ) for sub in list]
        
        print(new_list)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 2021-05-15
      相关资源
      最近更新 更多