Получение двух кортежей из списка

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

Итак, вот оно:

Входные данные:

x = range(8) # any even sequence 

Вывод:

 [[0, 1], [2, 3], [4, 5], [6, 7]] 

Мой прием:

 [ [x[i], x[i+1]] for i in range(len(x))[::2] ] 

4 Solutions collect form web for “Получение двух кортежей из списка”

Кортеж?

В Python 2. n

 >>> zip(*2*[iter(x)]) [(0, 1), (2, 3), (4, 5), (6, 7)] 

В Python 3. n

zip() ведет себя несколько иначе …

 >> zip(*2*[iter(x)]) <zip object at 0x285c582c> >>> list(zip(*2*[iter(x)])]) [(0, 1), (2, 3), (4, 5), (6, 7)] 

Списки?

Реализация в Python 2 и 3 одинакова …

 >>> [[i,j] for i,j in zip(*2*[iter(x)])] [[0, 1], [2, 3], [4, 5], [6, 7]] 

Или, альтернативно:

 >>> [list(t) for t in zip(*2*[iter(x)])] [[0, 1], [2, 3], [4, 5], [6, 7]] 

Последнее более полезно, если вы хотите разбить на list s из 3 или более элементов, не указав его, например:

 >>> [list(t) for t in zip(*4*[iter(x)])] [[0, 1, 2, 3], [4, 5, 6, 7]] 

Если zip(*2*[iter(x)]) выглядит немного странно для вас (и это было со мной в первый раз, когда я это увидел!), Посмотрите, как zip(*[iter(s)]*n) работать в Python? ,

См. Также эту парную реализацию , которая, я думаю, довольно аккуратная.

Если вы хотите кортежи вместо списков, вы можете попробовать:

 >>> zip(range(0, 8, 2), range(1, 8, 2)) [(0, 1), (2, 3), (4, 5), (6, 7)] 

Входные данные :

 x = range(8) # any even sequence 

Решение:

 output = [] for i, j in zip(*[iter(x)]*2): output.append( [i, j] ) 

Вывод:

 print output [[0, 1], [2, 3], [4, 5], [6, 7]] 

Вы можете немного переписать его:

 >>> l = range(8) >>> [[l[i], l[i+1]] for i in xrange(0, len(l), 2)] [[0, 1], [2, 3], [4, 5], [6, 7]] 

Для некоторых задач списка вы можете использовать itertools , но я уверен, что для этого нет вспомогательной функции.

  • установить и заморозить разницу в реализации
  • Как создать класс, который также является списком?
  • что такое быстрый способ удалить все элементы из списка, которые не удовлетворяют ограничениям?
  • Преобразование строки даты в YYYYMMDD
  • (Python) добавление списка в другой без скобок
  • Почему PyCharm использует 120 символов, хотя PEP8 указывает 79?
  • установка ввода пользователем имени переменной
  • Python: преобразовать строку в массив байтов
  • Send_blob в GAE
  • Python элегантная обратная функция int (строка, база)
  • Вызов метода Python по имени
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.