Как читать из файла и добавлять неповторяющиеся числа в список в Python? - PullRequest
0 голосов
/ 03 апреля 2020

Я читаю файл с сотнями чисел (которые повторяются) от 1 до 1000. Я хотел создать список всех уникальных чисел в файле. Как я это делаю (см. Прилагаемый код), любое число после 9, то есть 10 и выше, игнорируется и поэтому не сохраняется в списке.

TID = 0
items = []
f = open(dataset_name, 'r', encoding="utf8")
for row in f:
    TID = TID + 1
    for item in row:
        if item not in items:
            items.append(item)

Ответы [ 3 ]

1 голос
/ 03 апреля 2020

Как уже говорили другие, for item in row: l oop заставляет ваш код смотреть на отдельных символов, а не на каждую строку как на число.
Для данных этого маленького простого решения является чтение всех данные сразу, т.е.

With open('jutska.txt', 'r', encoding="utf8") as f:
    itemlist = f.read().split()
    TID = len(itemlist)
    items = set(int(item) for item in itemlist)

Если вам не нужно количество строк (TID), вы можете использовать

With open('jutska.txt', 'r', encoding="utf8") as f:
    items = set(int(item) for item in f.read().split())
1 голос
/ 03 апреля 2020

Разве вы не перебираете каждый ди git в любом числе, которые все еще являются строками, когда вы их читаете? Таким образом, соответствующая часть должна быть

seen = []
...
for line in f:
    if line not in seen:
        seen.append(line)

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

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

Я полагаю, у вас слишком много итераторов: row - строка в файле, а

for item in row:

будет выполнять итерацию по символам в строке.

Также Python установил структуру данных для этой цели, я думаю, что вы можете сделать это:

TID = 0
items = set()
f = open('jutska.txt', 'r', encoding="utf8")
for row in f:
    TID = TID + 1
    items.add(row.strip())

Обратите внимание на использование strip, чтобы избавиться от новой строки в конце, и преобразование в int.

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