加入具有指定分隔符的切碎列表
join a chopped up list with a specified delimiter
我有数量未知的样本,它们总是成对出现,例如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]
我在这里错过了什么?
您正在加入列表 表示,您希望在其中用冒号而不是逗号重建此表示。
我会执行以下操作(使用带有 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
方法并使用单个列表理解。
我有数量未知的样本,它们总是成对出现,例如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]
我在这里错过了什么?
您正在加入列表 表示,您希望在其中用冒号而不是逗号重建此表示。
我会执行以下操作(使用带有 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
方法并使用单个列表理解。