繁体   English   中英

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

[英]my function only returns the last item in a list

我正在尝试从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']

使用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)
if (i==Numero_commande):
                     a=[row[2],row[4]]
                     print(a)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM