python删除列表中的偶数
a=for i in a:
if i%2==0:
a.remove(i)
print(a)
为什么删除不干净偶数呢?
大佬们帮帮忙。 不要在迭代循环中,做.remove(i) 的操作,当remove后,指针会动的,达不到你想要的效果
你在删除原列表,会导致所有后续元素索引 - 1
导致有些元素并没有被遍历到。你可以用 [:] 拷贝一份列表进行遍历,即可实现正常的删除效果
参考代码:
a=
for i in a[:]:
if i%2==0:
a.remove(i)
print(a) a=
for i in a[:]:
if i%2==0:
a.remove(i)
print(a) Twilight6 发表于 2022-5-20 14:45
你在删除原列表,会导致所有后续元素索引 - 1
导致有些元素并没有被遍历到。你可以用 [:] 拷贝一份列 ...
那现在代码的时间复杂性和空间复杂性都是O(n)吧,那怎么实现时间复杂性为O(n),空间复杂性为O(1)呢?
2022@lif 发表于 2022-5-20 16:24
那现在代码的时间复杂性和空间复杂性都是O(n)吧,那怎么实现时间复杂性为O(n),空间复杂性为O(1)呢?
a=
i = 0
while i < len(a):
if a%2==0:
a.remove(a)
continue
i += 1
print(a) a=
a =
print(a)
试试这个,运用列表推导式结合三目运算符一行代码搞定 Twilight6 发表于 2022-5-20 16:40
能稍微解释一下吗{:10_297:},为什么这样子空间复杂度是为O(1)呢?这不应该还是O(n)嘛,我不太懂。 2022@lif 发表于 2022-5-20 17:23
能稍微解释一下吗,为什么这样子空间复杂度是为O(1)呢?这不应该还是O(n)嘛,我不太懂。
这里没有进行拷贝列表(拷贝列表就需要重新复制一便所有元素,即 n 个元素)
只命名了 1 个变量,没有进行递归堆栈,空间复杂度自然为 O(1) 常数级
Twilight6 发表于 2022-5-20 16:40
学到了, 太强了 Twilight6 发表于 2022-5-20 17:29
这里没有进行拷贝列表(拷贝列表就需要重新复制一便所有元素,即 n 个元素)
只命名了 1 个变量 ...
谢谢大佬解疑。 月下孤井 发表于 2022-5-20 17:11
a=
a =
print(a)
我也来一个不一样的哈哈
a=
b=list(filter(lambda i: i%2!=0 ,a))
print (b)
页:
[1]