从列表中删除多个项目

时间:2018-11-26 17:15:17

标签: python list indexing

我需要通过以下方式从列表中删除项目: 给出两个数字:

num1 = 2
num2 = 5
#These are arbitraty (can be different than 2 or 5) 

和列表:

[[10, 10], [20, 20], [30, 30], [40, 40], [50, 50], [60, 60], [70, 70], [80, 80], [90, 90], [100, 100]]

我需要删除这两个数字之间的所有项目,以便创建以下输出:

[[10, 10], [20, 20], [60, 60], [70, 70]]

因此保留第一个和第二个数字,删除第三个,第四个和第五个数字,保留第6个和第七个数字,并删除其余的

我试图创建一个删除项目的特定循环,但无法弄清楚如何运行索引。

谢谢!

2 个答案:

答案 0 :(得分:1)

您要每5个项目中的前5个中的前2个保留

data = [[10, 10], [20, 20], [30, 30], [40, 40], [50, 50], [60, 60], [70, 70],
        [80, 80], [90, 90], [100, 100]]

num1 = 2
num2 = 5  # num2 must be > num1

new_data = [x for i,x in enumerate(data) if i%num2 < num1 ]


print(new_data)

输出:

[[10, 10], [20, 20], [60, 60], [70, 70]]

诀窍是使用enumerate()并通过num2来对原始数据的给定索引取模-保留小于num1的那些。

index :   0,1,2,3,4,5,6,7,8,9, ...
i%num2:   0,1,2,3,4,0,1,2,3,4, ...
keep:     x x - - - x x - - -  ...

答案 1 :(得分:1)

我不确定您的意思是什么,但是我假设您的意思是:

  1. 将元素从num1删除到num2
  2. 删除num1 + num2之后的元素

只需使用del运算符并进行列表切片:

>>> mylist = [[10, 10], [20, 20], [30, 30], [40, 40], [50, 50], [60, 60], [70, 70], [80, 80], [90, 90], [100, 100]]
>>> num1, num2 = 2, 5
>>> mylist = mylist[:num1 + num2]
>>> mylist
[[10, 10], [20, 20], [30, 30], [40, 40], [50, 50], [60, 60], [70, 70]]
>>> del mylist[num1:num2]
>>> mylist
[[10, 10], [20, 20], [60, 60], [70, 70]]

请澄清您的意思是否不同。