Функция добавляет элементы списка в другой список, возвращая пустые списки / кортежи - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть текстовый файл с тремя строками, который я разбил на список списков с именем cleanedFileList, используя function1():

привет, 1

снова, 2

мир, 3

, который после запуска через function1() выглядит при печати следующим образом, вот что печатает fileOutput:

[[hello, 1], [again, 2], [world, 3]]

По сути, я пытаюсь создать function2(), который может добавлять слова в cleanedFileList в три отдельных списка на основе числового значения во второй позиции. Например, [hello,1] будет добавлено как 'hello' к l1, потому что оно несет значение 1 во второй позиции в cleanedFileList ... Аналогично, [again, 2] будет добавляться как 'снова' до l2 из-за значения 2 во второй позиции

fileInput = open('keywords.txt', 'r')


l1 = []
l2 = []
l3 = []


def function1(file):
        cleanedFileList = []
        for line in file:
            cleanedFileList.append(line.strip().split(','))
        return cleanedFileList

fileOutput = function1(fileInput)    

def function2(file):
       for i in range(len(file)):
            if file[i][1] == 1:
                l1.append(file[i][0])
            if file[i][1] == 2:
                l2.append(file[i][0])
            if file[i][1] == 3:
                l3.append(file[i][0])
       return l1, l2, l3


listOutput = function2(fileOutput)
print(listOutput)
print(l1)

Однако, когда я запускаю приведенный выше код, я получаю пустой кортеж (из оператора return в function2() и пустой список (при попытке вывести l1):

([], [], [])
[]

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Кажется, у вас есть строки в fileOutput, а не целые числа.Итак, «1»! = 1. А также вы можете видеть пробелы в строках: «1», «2» и т. Д.

0 голосов
/ 14 ноября 2018

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

from collections import defaultdict

lst = [['hello', '1'], ['again', '2'], ['world', '3'], ['good', '1'], ['morning', '3']]

d = defaultdict(list)

for x in lst:
    d[x[1]].append(x[0])

print(d)
# defaultdict(<class 'list'>, {'1': ['hello', 'good'], '2': ['again'], '3': ['world', 'morning']})

Теперь вы можете получить доступ ко всем элементам 1 как d['1'], всем элементам 2 как d['2'] и так далее ...

Например:

>>> d['1']
['hello', 'good']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...