在python中组合列表列表(类似于string.join但作为列表理解?)[重复]

Posted

技术标签:

【中文标题】在python中组合列表列表(类似于string.join但作为列表理解?)[重复]【英文标题】:combine list of lists in python (similar to string.join but as a list comprehension?) [duplicate] 【发布时间】:2013-12-20 03:55:50 【问题描述】:

如果您有一长串 [['A',1,2],['B',3,4]] 格式的列表,并且您想将其合并到 ['A, 1, 2', 'B, 3, 4'] 中,是否有一种简单的列表理解方法可以做到这一点?

我是这样做的:

this_list = [['A',1,2],['B',3,4]]
final = list()
for x in this_list:
     final.append(', '.join([str(x) for x in x]))

但这是否可以作为单行来完成?

感谢您的回答。我喜欢基于 map() 的。我有一个后续问题 - 如果子列表不是 ['A',0.111,0.123456] 格式,是否可以在列表理解中包含一个字符串格式化部分来截断,例如退出 'A, 0.1, 0.12'

再一次用我丑陋的代码,它会是这样的:

this_list = [['A',0.111,0.12345],['B',0.1,0.2]]
final = list()
for x in this_list:
    x = ', :.1f, :.2f'.format(x[0], x[1], x[2])
    final.append(x)

我解决了自己的问题:

values = [', :.2f, :.3f'.format(c,i,f) for c,i,f in values]

【问题讨论】:

@mgilson 这不是一个平面列表。 @AshwiniChaudhary -- 我很困惑。 OP 有一个列表列表,并且想要一个平面列表。没有? 不,在他的例子中是 2 个字符串 哦,原来如此。好的,把脚从嘴里移开(手指?) 【参考方案1】:
>>> lis = [['A',1,2],['B',3,4]]
>>> [', '.join(map(str, x)) for x in lis ]
['A, 1, 2', 'B, 3, 4']

【讨论】:

【参考方案2】:

您可以使用嵌套的list comprehensions 和str.join

>>> lst = [['A',1,2],['B',3,4]]
>>> [", ".join([str(y) for y in x]) for x in lst]
['A, 1, 2', 'B, 3, 4']
>>>

【讨论】:

@alko 实际上对于大型列表,建议使用它们。但是对于小列表,是的,它们可以被删除。 @alko - 是的。这是reference。 自己刚刚找到主题。我不知道加入的 2 遍行为,谢谢 @AshwiniChaudhary 和 @iCodez!【参考方案3】:
li = [['A',1,2],['B',3,4],['A',0.111,0.123456]]

print    [', '.join(map(str,sli)) for sli in li]


def func(x):
    try:
        return str(int(str(x)))
    except:
        try:
            return '%.2f' % float(str(x))
        except:
            return str(x)

print map(lambda subli: ', '.join(map(func,subli)) , li)

返回

['A, 1, 2', 'B, 3, 4', 'A, 0.111, 0.123456']
['A, 1, 2', 'B, 3, 4', 'A, 0.11, 0.12']

【讨论】:

以上是关于在python中组合列表列表(类似于string.join但作为列表理解?)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python中有没有办法解压缩类似于javascript中的传播运算符的列表? [复制]

美丽的汤正则表达列表中的Python循环[重复]

Python 求一个列表中所有元素组合出的最大数

python:依次选择类似于ngram CODE DEMO的字符串部分

Python - 从大量组合中构建满足某些标准的子列表

python 列表推导式