Создать список с каждым N-м элементом исходного списка
При анализе данных или программировании часто необходимо работать с подмножеством список. Одна из распространенных задач — создать новый список, содержащий только каждый N-й элемент исходного списка. Например, учитывая список целых чисел от 0 до 1000, как мы можем получить список, включающий только первый и каждый последующий 10-й элемент?
Используя традиционный цикл for, мы можем выполнить эту задачу следующим образом:
xs = list(range(1001))
new_list = []
for i, x in enumerate(xs):
if i % 10 == 0:
new_list.append(x)
Однако более краткий и эффективный подход доступен с использованием нарезки Python:
>>> xs = list(range(1001))
>>> new_list = xs[0::10]
В этом решении выражение xs[0::10] создает новый список, который включает в себя каждый 10-й элемент, начиная с индекса 0. Результатом является список, содержащий [0 , 10, 20, 30, ..., 1000] без необходимости циклов или условных проверок.
Этот метод значительно быстрее, чем подход цикла for, что оказывается выгодным при работе с большими списками. Как показано следующим сравнением времени:
$ python -m timeit -s "xs = list(range(1000))" "[x for i, x in enumerate(xs) if i % 10 == 0]"
500 loops, best of 5: 476 usec per loop
$ python -m timeit -s "xs = list(range(1000))" "xs[0::10]"
100000 loops, best of 5: 3.32 usec per loop
Этот оптимизированный подход с использованием срезов обеспечивает простоту и преимущества в производительности при создании новых списков с каждым N-м элементом исходного списка.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3