python - добавление разных столбцов из файла в разные списки? - PullRequest
2 голосов
/ 08 июля 2010

У меня есть файл с разделителями табуляции, как показано ниже:

A    3    A    6
B    6    B    9
C    0    C    2

Я хочу прочитать файл следующим образом:

LIST = [['A', '3'], ['B', '6'], ['C', '0'], ['A', '6'], ['B', '9'], ['C', '2']]

Порядок не важен. Меня беспокоит только то, что каждая строка читается с шагом два и присваивается подсписку.

Есть предложения?

Спасибо, S: -)

Ответы [ 2 ]

3 голосов
/ 08 июля 2010

Самый простой способ был бы:

>>> n = []
>>> for line in open(fname):
    els = line.split('\t')
    n.append(els[:2])
    n.append(els[2:])


>>> n
[['A', '3'], ['A', '6'], ['B', '6'], ['B', '9'], ['C', '0'], ['C', '2']]

, возможно, немного более эффективным будет:

>>> g = (line.split('\t') for line in open(fname))
>>> [els[i:i+2] for els in g for i in range(0, 4, 2)]
[['A', '3'], ['A', '6'], ['B', '6'], ['B', '9'], ['C', '0'], ['C', '2']]
0 голосов
/ 09 июля 2010

Этот вопрос на самом деле допускает некоторые решения Pythonic.

l = open(fname).read().split()
LIST = zip(l[::2], l[1::2])

Это все, что нужно сделать." Бам! "

Или мы можем " поднять его на ступеньку выше ":

def couple(i):
    while True:
        yield (i.next(), i.next())

LIST = [w for w in couple(iter(open(fname).read().split()))]

Дополнительные преимущества заключаются в том, что они будутчитать файл попарно, независимо от того, есть ли 4 столбца (как в примере) или 6, 2 ... что угодно


См. также pythonic-way-to-split-comma-разделенные числа в пары и как разделить список на куски равномерного размера в питоне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...