【问题标题】:Problems while reformating a nested list of tuples?重新格式化嵌套的元组列表时出现问题?
【发布时间】:2017-01-05 17:27:55
【问题描述】:

经过大量重新格式化后,我有以下 lis 元组:

[[(('A', 'X'), ('43,23', 'Y'), ('wepowe', 'd'))]]

如何重新格式化为:

'A', '43,23', 'wepowe'

我尝试过:

[' '.join(map(str,lis[0][0])) for x in lis]

[' '.join(map(str,lis[0][:1])) for x in lis]

' '.join(map(str, lis))

但是,我没有得到所需的格式。像上面这样重新格式化元组和列表的最简单方法是什么?

【问题讨论】:

    标签: python list python-3.x list-comprehension


    【解决方案1】:

    您可以像这样使用list comprehension

    my_list = [(('A', 'X'), ('43,23', 'Y'), ('wepowe', 'd'))]
    result = [item[0] for item in my_list[0]]
    

    输出:

    >>> result
    ['A', '43,23', 'wepowe']
    

    【讨论】:

    • 我的问题实际上是进入第一个括号,是用item[0]完成的吗?
    • 它由my_list[0] 完成,在您的列表中,您有一个元素,要访问它,您需要使用my_list[0],然后对于每个项目,访问您应该使用的第一个子项目item[0]
    【解决方案2】:

    您可以将zip 用作:

    >>> my_list = [(('A', 'X'), ('43,23', 'Y'), ('wepowe', 'd'))]
    >>> new_list , _ = zip(*my_list[0])
    #              ^ replace this with some variable in case you also want the
    #                elements at `1`st index of each tuple
    

    new_list 持有的价值将是:

    >>> new_list
    ('A', '43,23', 'wepowe')
    

    【讨论】:

    • 谢谢!,我喜欢这个解决方案,你能解释一下发生了什么吗?如果这是最有效的?
    • 检查zip document。您将了解它的作用。此外,您可能会发现 this post 很有帮助。在我的解决方案zip(*my_list[0])中,*用于解包列表,然后对解包列表执行zip
    • 实际上它在 1 分钟前就起作用了……我得到了这个:IndexError: list index out of range
    • 您必须更改了输入列表的结构,或者,您不会像我一样调用zip 函数:)
    【解决方案3】:

    在编写任何列表推导之前,让我们使用 2 个 for 循环来迭代列表,例如:

    tups = [(('A', 'X'), ('43,23', 'Y'), ('wepowe', 'd'))]
    
    for item in tups:
        for j in item:
            print j[0]
    

    现在,如果您看到我们得到了我们要查找的每个元组的第一个元素,我们可以将其转换为列表解析表达式,如下所示:

    ' '.join(str(j[0]) for item in tups for j in item)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-02
      • 2017-03-04
      • 2017-05-25
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      相关资源
      最近更新 更多