假设我有一份名单
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]但是,除了这些元素之外,我如何同样地选择所有元素呢?
发布于 2013-06-24 17:25:19
你是说这个?
>>> 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]发布于 2013-06-24 18:52:12
如果没有重复的数字,这是任何数字集合(不一定是连续的)的通用解决方案:
>>> 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.differences获取要删除的原始列表和子列表之间的set。
https://stackoverflow.com/questions/17281356
复制相似问题