我需要通过以下方式从列表中删除项目: 给出两个数字:
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个和第七个数字,并删除其余的
我试图创建一个删除项目的特定循环,但无法弄清楚如何运行索引。
谢谢!
答案 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)
我不确定您的意思是什么,但是我假设您的意思是:
num1
删除到num2
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]]
请澄清您的意思是否不同。