列表列表转换为具有条件的特定长度的列表列表
List of lists into a list of lists of a specific length with condition
data = [
['customers/2309565764/assets/34830517871',
'customers/2309565764/assets/34827154141',
'customers/2309565764/assets/34856605170',
'customers/2309565764/assets/34830515300'
],
['customers/2309565764/assets/34830515303',
'customers/2309565764/assets/34830473309',
'customers/2309565764/assets/34830508136',
'customers/2309565764/assets/34830515336'],
['customers/2309565764/assets/20029085042',
'customers/2309565764/assets/20033811553',
'customers/2309565764/assets/20065471524',
'customers/2309565764/assets/20029089104'],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
['customers/2309565764/assets/11111',
'customers/2309565764/assets/22222',
'customers/2309565764/assets/33333',
],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
]
我想从中得到什么
相同的列表列表,但每个内部列表的项目不得超过 20 个。它最终看起来像这样
[
['customers/2309565764/assets/34830517871',
'customers/2309565764/assets/34827154141',
'customers/2309565764/assets/34856605170',
....
20th element],
['customers/2309565764/assets/34830517871',
'customers/2309565764/assets/34827154141',
'customers/2309565764/assets/34856605170',
....
20th element],
['customers/2309565764/assets/34830517871',
'customers/2309565764/assets/34827154141',
'customers/2309565764/assets/34856605170',
....
last element],
]
使用此代码
result = []
transitional_data = []
for i in data:
if len(transitional_data) + len(i) <= 20:
for j in i:
transitional_data.append(j)
else:
result.append(transitional_data)
transitional_data = []
print(result)
我最终只有一个嵌套列表而不是 3 个(其中两个将有 20 个元素,一个有 4 个剩余元素)
[
['customers/2309565764/assets/34830517871',
'customers/2309565764/assets/34827154141',
'customers/2309565764/assets/34856605170',
....
20th element],
]
重要 数据中嵌套列表的条件 - 嵌套列表的元素不能分开,例如
的前两个元素
['customers/2309565764/assets/34830517871',
'customers/2309565764/assets/34827154141',
'customers/2309565764/assets/34856605170',
'customers/2309565764/assets/34830515300'
],
第一个子列表进不去,另外两个进不了另一个。原始嵌套列表中可以有 <= 4 个项目。
更新
我更新了输入数据,现在第 5 个嵌套列表包含 3 个元素。如果我 运行
flat_list = [item for sublist in data for item in sublist]
partitioned_list = [flat_list[i:i + 20] for i in range(0, len(flat_list), 20)]
结果数据包含 3 个嵌套列表 - 这就是我需要得到的。但是第 6 个嵌套列表的第一个元素在第一个结果子列表中,另外 2 个在第二个结果子列表中
这是考虑到特殊情况的版本。我简化了数据列表中的值,以便更容易读取输入和输出。
data = [
['1', '2', '3', '4'],
['5', '6', '7', '8'],
['9', '10', '11', '12'],
['13', '14', '15', '16'],
['17', '18', '19'],
['20', '21', '22', '23'],
['24', '25', '26', '27'],
['28', '29', '30', '31'],
['32', '33', '34', '35'],
['36', '37', '38', '39'],
['40', '41', '42', '43']
]
def combine(original_list, maxlen=20):
outer_list = []
accum = []
for sublist in original_list:
# if the next set of values will fit, extend the sublist
if len(accum) + len(sublist) <= maxlen:
accum.extend(sublist)
else:
# otherwise start a new sublist
outer_list.append(accum)
accum = list(sublist)
# pick up any values that are left over
if accum:
outer_list.append(accum)
return outer_list
new_list = combine(data)
print(new_list)
根据 Stef 评论中的想法,这会在列表中累积值,直到达到最大长度,但不会拆分原始输入中的子列表。
输出:
[['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19'],
['20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39'],
['40', '41', '42', '43']]
data = [
['customers/2309565764/assets/34830517871',
'customers/2309565764/assets/34827154141',
'customers/2309565764/assets/34856605170',
'customers/2309565764/assets/34830515300'
],
['customers/2309565764/assets/34830515303',
'customers/2309565764/assets/34830473309',
'customers/2309565764/assets/34830508136',
'customers/2309565764/assets/34830515336'],
['customers/2309565764/assets/20029085042',
'customers/2309565764/assets/20033811553',
'customers/2309565764/assets/20065471524',
'customers/2309565764/assets/20029089104'],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
['customers/2309565764/assets/11111',
'customers/2309565764/assets/22222',
'customers/2309565764/assets/33333',
],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
['customers/2309565764/assets/20033813263',
'customers/2309565764/assets/20065476771',
'customers/2309565764/assets/20029091753',
'customers/2309565764/assets/20029091369'],
]
我想从中得到什么
相同的列表列表,但每个内部列表的项目不得超过 20 个。它最终看起来像这样
[
['customers/2309565764/assets/34830517871',
'customers/2309565764/assets/34827154141',
'customers/2309565764/assets/34856605170',
....
20th element],
['customers/2309565764/assets/34830517871',
'customers/2309565764/assets/34827154141',
'customers/2309565764/assets/34856605170',
....
20th element],
['customers/2309565764/assets/34830517871',
'customers/2309565764/assets/34827154141',
'customers/2309565764/assets/34856605170',
....
last element],
]
使用此代码
result = []
transitional_data = []
for i in data:
if len(transitional_data) + len(i) <= 20:
for j in i:
transitional_data.append(j)
else:
result.append(transitional_data)
transitional_data = []
print(result)
我最终只有一个嵌套列表而不是 3 个(其中两个将有 20 个元素,一个有 4 个剩余元素)
[
['customers/2309565764/assets/34830517871',
'customers/2309565764/assets/34827154141',
'customers/2309565764/assets/34856605170',
....
20th element],
]
重要 数据中嵌套列表的条件 - 嵌套列表的元素不能分开,例如
的前两个元素['customers/2309565764/assets/34830517871',
'customers/2309565764/assets/34827154141',
'customers/2309565764/assets/34856605170',
'customers/2309565764/assets/34830515300'
],
第一个子列表进不去,另外两个进不了另一个。原始嵌套列表中可以有 <= 4 个项目。
更新 我更新了输入数据,现在第 5 个嵌套列表包含 3 个元素。如果我 运行
flat_list = [item for sublist in data for item in sublist]
partitioned_list = [flat_list[i:i + 20] for i in range(0, len(flat_list), 20)]
结果数据包含 3 个嵌套列表 - 这就是我需要得到的。但是第 6 个嵌套列表的第一个元素在第一个结果子列表中,另外 2 个在第二个结果子列表中
这是考虑到特殊情况的版本。我简化了数据列表中的值,以便更容易读取输入和输出。
data = [
['1', '2', '3', '4'],
['5', '6', '7', '8'],
['9', '10', '11', '12'],
['13', '14', '15', '16'],
['17', '18', '19'],
['20', '21', '22', '23'],
['24', '25', '26', '27'],
['28', '29', '30', '31'],
['32', '33', '34', '35'],
['36', '37', '38', '39'],
['40', '41', '42', '43']
]
def combine(original_list, maxlen=20):
outer_list = []
accum = []
for sublist in original_list:
# if the next set of values will fit, extend the sublist
if len(accum) + len(sublist) <= maxlen:
accum.extend(sublist)
else:
# otherwise start a new sublist
outer_list.append(accum)
accum = list(sublist)
# pick up any values that are left over
if accum:
outer_list.append(accum)
return outer_list
new_list = combine(data)
print(new_list)
根据 Stef 评论中的想法,这会在列表中累积值,直到达到最大长度,但不会拆分原始输入中的子列表。
输出:
[['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19'],
['20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39'],
['40', '41', '42', '43']]