Помещение значений столбцов из текстового файла в список в python - PullRequest
2 голосов
/ 17 апреля 2020

У меня есть такой текстовый файл:

a    w
b    x
c,d  y
e,f  z

И я хочу получить значения первого столбца в списке без дубликатов. Пока что я получаю значения из первого столбца, что я делаю так:

f=open("file.txt","r")
lines=f.readlines()
firstCol=[]
for x in lines:
    firstCol.append(x.split('   ')[0])
f.close()

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

[['a'], ['b'], ['c', 'd'], ['e', 'f']]

Как я могу преобразовать это в одномерную вещь, чтобы иметь возможность удалять дубликаты впоследствии? Я новичок в python.

Ответы [ 3 ]

0 голосов
/ 17 апреля 2020

Вы можете разделить его сразу после первого разбиения и использовать расширение вместо добавления.

f=open("file.txt","r")
lines=f.readlines()
firstCol=[]
for x in lines:
    firstCol.extend(x.split(' ')[0].split(','))
f.close()

print(firstCol)

Результат

['a', 'b', 'c', 'd', 'e', 'f']

Или, если вы хотите сохранить первыйCol

f=open("file.txt","r")
lines=f.readlines()
firstCol=[]
for x in lines:
    firstCol.append(x.split(' ')[0])
f.close()

one_dimension = []
for col in firstCol:
    one_dimension.extend(col.split(','))

print(firstCol)
print(one_dimension)

Результат

['a', 'b', 'c,d', 'e,f']
['a', 'b', 'c', 'd', 'e', 'f']
0 голосов
/ 17 апреля 2020

Возможное решение 1

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

import itertools

firstCol.sort()
firstCol = list(x for x,_ in itertools.groupby(firstCol))

Возможное решение 2

Если вы хотите преобразовать список списков в один список элементов:

firstCol = [x for y in firstCol for x in y]

Если вы также хотите удалить дубликаты:

firstCol = list(set([x for y in firstCol for x in y]))
0 голосов
/ 17 апреля 2020

вы можете использовать itertools.chain, чтобы сгладить ваш список списков, а затем вы можете использовать встроенный класс set, чтобы удалить дубликаты:

from itertools import chain

l = [['a'], ['b'], ['c', 'd'], ['e', 'f']]
set(chain.from_iterable(l))
# {'a', 'b', 'c', 'd', 'e', 'f'}

, чтобы сгладить ваш список вы также можно использовать понимание списка:

my_l = [e for i in l for e in i]
# ['a', 'b', 'c', 'd', 'e', 'f']

то же самое с 2 простыми for циклами:

my_l = []

for i in l:
    for e in i:
        my_l.append(e)
...