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

问题描述 投票:0回答:4

说我有一个清单

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]

但是我怎样才能类似地选择所有元素除了那些元素?

python list python-3.x element slice
4个回答
4
投票

你是说这个吗?

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

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
,即原始列表和要删除的子列表之间的差异。


0
投票

来自OP的评论:如何选择除Q[::9]返回的值之外的所有其他值?

我使用列表理解:

Q = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
print(Q)
print(Q[::9])                               # [0, 9, 18]
print([x for x in Q if x not in Q[::9]])    # [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17]

0
投票

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

every_ninth = Q[::9] # [0, 9, 18]

all_apart_from_ninth = [x for i, x in enumerate(Q) if i % 9 != 0]

打印(所有_除了_第九)

© www.soinside.com 2019 - 2024. All rights reserved.