2016-12-22 4 views
-2

Распечатать первые N элементов списка/генератораПолучить первые N элементов списка, в том случае если список короче

Это работает для простых списков. Он печатает первые 3 наименования в списке

l=[1, 2, 3, 4] 
print(l[:min(3, len(l))]) 

Я хочу, чтобы эта работа была для списков с менее чем тремя элементами. Если в списке есть только один элемент, напечатайте один элемент.

AFAIK len (l) работает только для списков. Как реализовать это для генераторов?

+6

Это, вероятно, поможет с вопросом генератора: [? Как сделать первые N элементов из генератора или списка в Python] (http://stackoverflow.com/questions/5234090/how-to-take -the-first-n-items-from-a-generator-or-list-in-python) – Keiwan

+0

* «Я хочу эту работу для списков с менее чем тремя элементами тоже» * - ... это так? – jonrsharpe

ответ

1

Вы можете просто использовать l[:3], нет необходимости что-либо еще:

In [11]: l = [1, 2, 3 ,4] 

In [12]: print(l[:3]) 
[1, 2, 3] 

Это будет работать точно так же для генераторов:

In [19]: def firstn(n): 
    ...:  num = 0 
    ...:  while num < n: 
    ...:   yield num 
    ...:   num += 1 
    ...: 

In [20]: list(firstn(5))[:3] 
Out[20]: [0, 1, 2] 
+0

Вопрос для генератора, а не для списка. –

+1

@ Ajeet, просто добавил пример для генераторов – Dekel

+1

Генераторы потенциально бесконечно длинны. Это также очень неэффективно, чтобы выпустить их * затем * срез. – jonrsharpe

1

Для списков можно использовать

l = [1, 2, 3, 4, 5] 
print(l[:3]) 

Это не подведет и для более коротких списков. Если вы хотите использовать генераторы, я думаю, что лучший путь преобразования генератора в список и делать то же самое

a = (i for i in range(0, 4)) # example of generator 
print(list(a)[:3]) 

Также не преминут для коротких генераторов

Если вы хотите, чтобы получить генератор после срез, используйте itertools

import itertools 
print(itertools.islice(generated_list, 3) 
-1

Если я правильно понял вопрос правильно, вы хотите генератор, чтобы произвести мин (N, длина (генератор)).

Применить slice к генератору напрямую. Не нужно создавать экземпляр списка. Это будет производить генератор с минимальным (N, len (генератором)) удлиненным генератором.

например.

>>> l = range(5) 
>>> l[:10] 
range(0, 5) 
>>> 
+0

Объект диапазона является особым случаем, это не будет работать на произвольных генераторах. – jonrsharpe

Смежные вопросы