在Python 3中定期选择列表元素

时间:2013-06-24 17:23:35

标签: python list python-3.x element slice

说我有一个清单

Q = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]

我相信我可以使用扩展切片表示法提取第一个和第九个值:

Q[::9]

应该给出:

[0,9,18]

但我怎样才能同样选择之外的所有元素?

2 个答案:

答案 0 :(得分:2)

你是说这个?

>>> lis =[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
>>> lis[1::9]
[1, 10]

扩展切片表示法:

lis[start : stop : step]  #default values : start = 0, stop = len(lis), step = 1

您可以为start传递您自己的值(默认使用0)

<强>更新

>>> lis = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
>>> se = set(range(0, len(lis),9))   #use a list if the lis is not huge.
>>> [x for i,x in enumerate(lis) if i not in se]
[1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17]

#for your example even this will work:
>>> [x for i,x in enumerate(lis) if i%9 != 0]
[1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17]

答案 1 :(得分:0)

如果您没有重复数字,这是任何数字集合的一般解决方案(不一定是连续的):

>>> Q = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
>>> list(set(Q).difference(Q[::9]))
[1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17]
>>> 

它使用set.difference来获取set,这是原始列​​表与要删除的子列表之间的差异。