Скажем , у нас есть список чисел от 0 до 1000. Есть ли вещий / эффективный способ для получения списка из первых и каждого последующего элемента 10, то есть [0, 10, 20, 30, ... ]
?
Да, я могу сделать это с помощью цикла for, но мне интересно, есть ли более аккуратный способ сделать это, возможно, даже в одной строке?
0
избыточно вl[0::10]
.l[::10]
более читабелен, менее запутан.source_list[::10]
является наиболее очевидным, но это не работает для любого итерируемого и не эффективно для памяти больших списков.itertools.islice(source_sequence, 0, None, 10)
работает для любой итерируемой и эффективно использует память, но, вероятно, не самое быстрое решение для большого списка и большого шага.(source_list[i] for i in xrange(0, len(source_list), 10))
источник
Вы можете использовать оператор среза следующим образом:
источник
L[2::2]
Из руководства:
s[i:j:k] slice of s from i to j with step k
источник
Это выбирает каждый 10-й элемент списка.
источник
Почему бы просто не использовать шаговый параметр функции range, чтобы получить:
Для сравнения на моей машине:
источник
источник
Вот лучшая реализация понимания списка «каждый 10-й элемент», который не использует содержимое списка как часть теста членства:
Но это все еще намного медленнее, чем просто использование списков.
источник
Для этого созданы списки:
Вы можете получить больше информации о них в официальной документации python: http://docs.python.org/tutorial/datastructures.html#list-comprehensions
источник