首页 > 解决方案 > 为什么执行代码后我的列表被清除了?

问题描述

我正在执行这段代码,我得到了l = [[], [], []]

conn = sqlite3.connect('database.db')
    c = conn.cursor()
    c.execute(f'SELECT * FROM {login}')
    l = []
    f = []
    for row in c:
'''
                  row = (1000, None, 'salary', 'nevermind')
                        (1000, None, 'salary', 'nevermind')
                        (None, 2000, 'shop', 'nevermind')
'''
        for x in row:
            if x == None:
                x = 0
            f.append(x)
        l.append(f)
        f.clear()
    print(l)  # l = [[], [], []]

执行此代码后,我的列表完全为空!为什么?

PS抱歉让问题变得如此丑陋(

标签: pythonarrayslist

解决方案


您的列表已被清除,因为您清除了它:

    f.clear()

该列表l只包含对 的引用f,因此当您清除 时f,您将清除 的所有子列表l

如果您只想构建一个将c所有None值更改为 0 的副本,您可以执行以下操作:

l = [[x or 0 for x in row] for row in c]

推荐阅读