python - 为什么执行代码后我的列表被清除了?
问题描述
我正在执行这段代码,我得到了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抱歉让问题变得如此丑陋(
解决方案
您的列表已被清除,因为您清除了它:
f.clear()
该列表l
只包含对 的引用f
,因此当您清除 时f
,您将清除 的所有子列表l
。
如果您只想构建一个将c
所有None
值更改为 0 的副本,您可以执行以下操作:
l = [[x or 0 for x in row] for row in c]
推荐阅读
- c++ - 如何防止写入 0 而不是未输入的数组元素?
- c - 如何使 C 包装器 API 线程安全?
- c# - C#,如何设计多个接口以访问相同的委托?
- javascript - 如何将有序 Map 构造为持久数据结构?
- c# - 我无法读取字典中的结构值
- sql-server - Windows 调试器(Windbg)无法为 SQL 转储文件加载符号
- protege - Protege 中旧类与其子类之间的新类
- java - HTTP 状态 404 - 未找到 -hibernate-spring mvc--
- vue.js - Vuejs 中的 ESLint + Prettier 警告
- spacy - 在法国简历中为 NER 训练一个 spacy 模型没有给出任何结果