【发布时间】:2021-10-11 18:34:58
【问题描述】:
我有这份清单
MAIN = [
['ABC', '562', '112', '80', '231', '217', '433', '115', '10'],
['ABC', '562', '112', '80', '231', '322', '202', '432', '12'],
['ABC', '562', '112', '80', '231', '677', '133', '255', '64'],
['DEF', '711', '87', '319', '433', '981', '400', '100', '09'],
['DEF', '711', '87', '319', '433', '113', '210', '321', '51'],
['DEF', '711', '87', '319', '433', '921', '711', '991', '44']
]
我想从MAIN 列表中生成 2 个列表。
1- 首先获取列表A,该列表将为 MAIN 中的每个子列表包含从索引 0 到索引 4 的元素,从而得到这个
A = [
['ABC', '562', '112', '80', '231'],
['ABC', '562', '112', '80', '231'],
['ABC', '562', '112', '80', '231'],
['DEF', '711', '87', '319', '433'],
['DEF', '711', '87', '319', '433'],
['DEF', '711', '87', '319', '433']
]
并删除重复项以最终获得此A 列表:
A = [
['ABC', '562', '112', '80', '231'],
['DEF', '711', '87', '319', '433'],
]
2 - 为MAIN 中的每个子列表获取索引为 0 和从索引 5 到索引 8 的元素的列表 B,从而得到这个
B = [
['ABC', '217', '433', '115', '10'],
['ABC', '322', '202', '432', '12'],
['ABC', '677', '133', '255', '64'],
['DEF', '981', '400', '100', '09'],
['DEF', '113', '210', '321', '51'],
['DEF', '921', '711', '991', '44']
]
到目前为止,我的尝试如下:
获取列表A
A = []
for z in MAIN:
y = z[:5]
if not (y in A):
A.append(y)
获取列表B
B = []
for z in MAIN:
B.append(list(set(z) - set(z[1:5])))
在下面的结果中,列表 A 似乎没问题,但列表 B 的子列表顺序不同,最后一个子列表缺少元素。
A = [
['ABC', '562', '112', '80', '231'],
['DEF', '711', '87', '319', '433']
]
B = [
['217', '433', 'ABC', '10', '115'],
['322', '202', '432', 'ABC', '12'],
['255', '64', '677', 'ABC', '133'],
['09', '100', '400', '981', 'DEF'],
['113', '51', '210', '321', 'DEF'],
['DEF', '44', '991', '921']
]
确保A 和B 正确输出的最佳方法是什么?感谢您的帮助。
【问题讨论】:
-
你已经投入了大量的工作来问这个问题。我唯一的批评是你应该使用一个普通的python标签
-
B 有不同顺序的子列表,因为您使用的是集合。
标签: python python-3.x slice nested-lists