加入具有指定分隔符的切碎列表

join a chopped up list with a specified delimiter

我有数量未知的样本,它们总是成对出现,例如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]

我在这里错过了什么?

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

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

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 因为您似乎想在替代表示中保留方括号.

我相信 可以变得更简单:

>>> 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 方法并使用单个列表理解。