我的样本数量不详,总是成对出现,例如11 22
或33 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]
我在这里缺少什么?
答案 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
方法并使用单个列表理解。