使用指定的分隔符加入一个切碎的列表

时间:2018-03-12 20:01:21

标签: python python-3.x list split chunks

我的样本数量不详,总是成对出现,例如11 2233 44

我将所有样本存储在列表[11, 22, 33, 44]中,然后通过成对[[11, 22], [33, 44]]将其删除以获得嵌套列表。

这一切都是为了使用这些对并稍后用指定的分隔符显示它们,例如11:22

我有这个功能来完成聚合数据和拆分列表的工作:

def chop_it_up(array, chunk):
    for i in range(0, len(array), chunk):
        yield array[i:i+chunk]

n_samples = int(input("Number of samples: "))

list_of_samples = []
for i in range(n_samples):
    list_of_samples.extend(list(map(int, input().strip().split(' '))))

chunks = list(chop_it_up(list_of_samples, 2))

print(':'.join(str(x) for x in chunks))

示例输入为:

26 34 78 94 51 130

然而,代码的最后一行产生了这个:

[11, 22]:[33, 44]

虽然所需的输出应为:

[11:22] [33:44]

我在这里缺少什么?

2 个答案:

答案 0 :(得分:5)

您正在加入列表表示,您希望使用冒号而不是逗号重建此表示。

我会执行以下操作(使用带空格的外连接来连接生成的子列表表示):

chunks = [11, 22],[33, 44]  
print(" ".join(["[{}]".format(":".join(map(str,chunk))) for chunk in chunks]))

打印:

[11:22] [33:44]

解释解决方案的核心:

"[{}]".format(":".join(map(str,chunk))

chunk的每个数字转换为字符串(因此str.join接受它)并将其传递给str.format,因为您似乎希望在备用表示中保留方括号。< / p>

答案 1 :(得分:-1)

我相信Jean's solution可以变得更简单:

>>> l = [11, 22, 33, 44]
>>> r = ["[{}:{}]".format(l[i], l[i+1]) for i in range(0, len(l), 2)]
>>> print(*r)
[11:22] [33:44]


这个答案避免使用多个join方法并使用单个列表理解。