gpt4 book ai didi

python - 列表列表中的自定义切片

转载 作者:行者123 更新时间:2023-12-02 02:03:43 26 4
gpt4 key购买 nike

我有这个 list

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 - 获取列表 B,其中 MAIN 中的每个子列表的元素索引为 0,索引 5 到索引 8,结果如下

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']
]

确保 AB 正确输出的最佳方法是什么?感谢您的帮助。

最佳答案

您可以使用推导式将切片应用于每个元素:

[x[:5] for x in MAIN]

据我所知,删除重复项的最佳方法是使用set。但是,您无法向其中添加列表,因此您必须将切片包装在元组中:

A = list(set(tuple(x[:5]) for x in MAIN))

如果您希望元素是列表而不是元组,则必须显式转换它们:

A = list(map(list, set(tuple(x[:5]) for x in MAIN)))

您不能依赖 set 为您创建切片,因为它不能保证顺序或保留重复项。相反,只需将切片附加在一起即可:

B = [x[:1] + x[5:9] for x in MAIN]

请注意,切片x[:1](又名x[0:1])创建一个单元素列表,而x[0] 将返回与标量相同的元素。任何索引 n 都可以通过这种方式重写为切片 n:n+1

关于python - 列表列表中的自定义切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68688802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com