моя функция возвращает только последний элемент в списке - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь прочитать некоторые данные из CSV-файла. Проблема в том, что список отображается только тогда, когда print (a) находится под блоком if в противном случае отображается только последний элемент в списке

 def products_per_command():
    a=[]
    with open('commande_client.csv') as csv_file:
        Numero_commande=input ('entrez le numero de la commande que vous cherchez :' )
        csv_reader = csv.reader(csv_file, delimiter=';')
        for row in csv_reader:
            for i in row:
                if (i==Numero_commande):
                     a=[row[2],row[4]]
                     print(a)

вывод здесь:

 entrez le numero de la commande que vous cherchez :1
['af23', '150']
['ab12', '500']
['ab12', '214']
['af12', '21']
['ab12', '526']
['ab12', '223'] 

это то, что я на самом деле хочу, но когда я ставлю «print (a)» в конце моей функции (не под каким-либо циклом или «если»), он отображает только последний элемент:

['ab12', '223']

Ответы [ 2 ]

1 голос
/ 11 июля 2019
if (i==Numero_commande):
                     a=[row[2],row[4]]
                     print(a)

Поскольку эта часть находится внутри вашего цикла, вы устанавливаете новое значение на a с каждой итерацией. Если вы печатаете его в цикле, a печатается с его текущим значением на каждой итерации, давая вам весь намеченный список в выводе. Обратите внимание, что объединенный список никогда не сохраняется в памяти сразу.
Однако, если вы напечатаете a вне цикла, a будет иметь значение, которое вы ему присвоили в последней итерации.

Как уже говорили другие, вы хотите использовать a.append() вместо a = ..., поскольку это добавляет к списку вместо его перезаписи.

1 голос
/ 11 июля 2019

Использование list.append

def products_per_command():
    a=[]
    with open('commande_client.csv') as csv_file:
        Numero_commande=input ('entrez le numero de la commande que vous cherchez :' )
        csv_reader = csv.reader(csv_file, delimiter=';')
        for row in csv_reader:
            for i in row:
                if (i==Numero_commande):
                    a.append([row[2],row[4]])
    print(a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...