Arhn - архитектура программирования

Разделить элементы списка на столбцы и добавить в новый список

У меня есть список, в котором каждый элемент представляет собой длинную строку символов одинаковой длины:

['KLGNVAGELQPFAPSED', 'MPDNVSFELQPPASJED', 'YYLNVSFEDQPPAPMED']

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

KLGNVAGELQPFAPSED
MPDNVSFELQPPASJED
YYLNVSFEDQPPAPMED

поэтому я хочу, чтобы в новом списке были элементы из соответствующих столбцов в первом списке, например:

['KMY', 'LPY', 'GDL' 'NNN', ...]

Я пробовал следующее:

for i in sub1:
   for j in i:
      pos.append(j)
   pos.append('\n')

Но тогда у меня не получается разделить все на отдельные строки.

18.05.2015

Ответы:


1

Вам нужно zip объединить элементы списка, а затем соединить кортежи в виде строк:

new_list = [''.join(i) for i in zip(*old_list)] # KMY, LPY, GDL, ...
18.05.2015
  • Работает как надо! Никогда не слышал об этом * персонаже. Спасибо. 18.05.2015
  • @estranged Да, в основном * распаковывает список в качестве аргументов для функции. 18.05.2015
  • Пожалуйста, отметьте как ответ галочкой рядом с моим ответом. 18.05.2015

  • 2

    Вы можете использовать map и zip

    >>> l = ['KLGNVAGELQPFAPSED', 'MPDNVSFELQPPASJED', 'YYLNVSFEDQPPAPMED']
    >>> map(''.join,zip(*l))
    ['KMY', 'LPY', 'GDL', 'NNN', 'VVV', 'ASS', 'GFF', 'EEE', 'LLD', 'QQQ', 'PPP', 'FPP', 'AAA', 'PSP', 'SJM', 'EEE', 'DDD']
    

    Обратите внимание, что map работает быстрее, чем list-comp, где нет необходимости в функции lambda.

    $ python -m timeit "[''.join(i) for i in zip(*['KLGNVAGELQPFAPSED', 'MPDNVSFELQPPASJED', 'YYLNVSFEDQPPAPMED'])]"
    100000 loops, best of 3: 3.54 usec per loop
    $ python -m timeit "map(''.join,zip(*['KLGNVAGELQPFAPSED', 'MPDNVSFELQPPASJED', 'YYLNVSFEDQPPAPMED']))"
    100000 loops, best of 3: 2.87 usec per loop
    

    Вы можете узнать больше о разнице в скорости здесь

    map может быть микроскопически быстрее в некоторых случаях (когда вы НЕ создаете лямбду для этой цели, а используете ту же функцию в карте и listcomp). Понимание списков может быть быстрее в других случаях, и большинство (не все) питонистов считают их более прямыми и ясными.

    18.05.2015
  • Спасибо за подробный ответ 18.05.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..