2024-09-27 04:20:24 发布
网友
假设
x = range(20) k = 5 x_kth = x[::5]
这给了我0,5,10,15 etc 有什么简单的方法可以得到x中的非第k个元素吗?你知道吗
0,5,10,15 etc
x_nonkth = [1,2,3,4,6,7,8,9,11 etc
我知道我能做到
x_nonkth = [x[i] for i in range(len(x)) if i%k]
但我正在寻找一个更简单的方法(可能更快?)如果有的话。你知道吗
通过使用enumerate,您可以变得更具python风格。除此之外,这个列表几乎就是你想要什么的定义:
enumerate
>>> lst = range(20) >>> [e for i, e in enumerate(lst) if i % 5] [1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19]
另一种方法是获取切片并将其链接起来,但我不认为这更简单(如果k很大,列表很长,则可能更快):
k
from itertools import islice, chain def without_kth(lst, k): return list(chain.from_iterable( islice(lst, i+1, i+k) for i in range(0, len(lst), k) ))
您可以使用del x[::5]删除列表中的每五个元素。它会改变原来的列表,所以如果你想要一个新的列表,一定要先复制这个列表,然后再使用这个改变,例如
del x[::5]
>>> y = x[:] >>> del y[::5] >>> print y [1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19]
您可以利用set差异:
set
>>> x = range(20) >>> k = 5 >>> list(set(x) - set(x[::k])) [1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19]
通过使用
enumerate
,您可以变得更具python风格。除此之外,这个列表几乎就是你想要什么的定义:另一种方法是获取切片并将其链接起来,但我不认为这更简单(如果
k
很大,列表很长,则可能更快):您可以使用
del x[::5]
删除列表中的每五个元素。它会改变原来的列表,所以如果你想要一个新的列表,一定要先复制这个列表,然后再使用这个改变,例如您可以利用
set
差异:相关问题 更多 >
编程相关推荐