3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
>>> lst = list(range(165))
>>> lst[0::10]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160]
請(qǐng)注意,這比循環(huán)并檢查每個(gè)元素的模量快約100倍:
$ python -m timeit -s "lst = list(range(1000))" "lst1 = [x for x in lst if x % 10 == 0]"
1000 loops, best of 3: 525 usec per loop
$ python -m timeit -s "lst = list(range(1000))" "lst1 = lst[0::10]"
100000 loops, best of 3: 4.02 usec per loop

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
source_list[::10]
是最明顯的,但這對(duì)任何可迭代的方法都無效,并且對(duì)于大列表而言內(nèi)存效率不高。itertools.islice(source_sequence, 0, None, 10)
適用于任何可迭代且內(nèi)存有效的方法,但對(duì)于大型列表和大型步驟而言,可能不是最快的解決方案。(source_list[i] for i in xrange(0, len(source_list), 10))

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
為什么不只使用range函數(shù)的step參數(shù)來獲得:
l = range(0, 1000, 10)
為了進(jìn)行比較,在我的機(jī)器上:
H:\>python -m timeit -s "l = range(1000)" "l1 = [x for x in l if x % 10 == 0]"
10000 loops, best of 3: 90.8 usec per loop
H:\>python -m timeit -s "l = range(1000)" "l1 = l[0::10]"
1000000 loops, best of 3: 0.861 usec per loop
H:\>python -m timeit -s "l = range(0, 1000, 10)"
100000000 loops, best of 3: 0.0172 usec per loop
添加回答
舉報(bào)