我的函数只返回列表中的最后一项

时间:2019-07-11 11:14:31

标签: python function

我正在尝试从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)”放在函数的末尾(不在任何循环或“ if”下)时,它仅显示最后一项:

['ab12', '223']

2 个答案:

答案 0 :(得分:1)

使用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)

答案 1 :(得分:1)

if (i==Numero_commande):
                     a=[row[2],row[4]]
                     print(a)

由于此部分位于循环内,因此每次迭代时都要将新值设置为a。如果在循环中打印它,则a会在每次迭代时打印其当前值,从而在输出中提供整个预期列表。请注意,组合列表永远不会一次保存在内存中。
但是,如果在循环外打印a,则a将具有您在上次迭代中为其分配的值。

就像其他人所说的那样,您要使用a.append()而不是a = ...,因为这会添加到列表中而不是覆盖它。