-
2020-11-28 11:31:10
在列表字典中删除每个列表的最后一个元素有什么更加pythonic或有效的方法?
例如,拿这个:
listDict = {'tom': [-2,10,2,-8], 'sam': [-9,-10,-10,-7]}
并将其转化为:
listDict = {'tom': [-2,10,2], 'sam': [-9,-10,-10]}
这就是我目前正在做的事情:
new = {}
for t,item in listDict.iteritems():
new[t] = [item[0], item[1], item[2]]
listDict= new
解决方法:
与此解决方案相比,随着列表长度的增加,Blender的答案变得非常低效:
for k, v in listDict.items():
v.pop()
对于你的示例listDict,差异并不大,只有27%.但是使用带有100个密钥的dict和长度从50到100的列表,并弹出50个,dict理解方法需要的时间要长12倍.这是因为此解决方案修改了存在列表,而不是每次都创建每个列表的副本.
我担心没有单行版本,除非你是cheating.我提到这一点的原因是为了防止某些dofus感到被迫在评论中指出它.请不要使用dict / list comprehensions进行副作用.
当然你可以在一行上完成如下操作,但PEP8说“而不是”:
for k, v in listDict.items(): v.pop()
标签:python,dictionary
来源: https://codeday.me/bug/20190713/1447048.html
更多相关内容 -
在Python中删除列表的第一个元素
2021-04-27 03:19:32我知道,如果我只想删除python中list t的第一个元素,我可以用以下方法来完成:del t[0]这是最简单的。然而:t = t[1:]号同样有效。在我正在学习的教科书中说,使用后一种方法通常被认为是不好的做法,因为它本身并...我知道,如果我只想删除python中list t的第一个元素,我可以用以下方法来完成:
del t[0]
这是最简单的。然而:
t = t[1:]
号
同样有效。在我正在学习的教科书中说,使用后一种方法通常被认为是不好的做法,因为它本身并不删除列表的标题,但是
"slice运算符创建一个新的列表,赋值使t引用它,但没有一个引用它。"对作为参数传递的列表有任何影响。"
为什么这样不好?你能举出一个例子,在这个例子中,这样的方法会显著地改变一个函数吗?事先谢谢。
如果您特别想做的是从列表中删除第一个元素,那么使用不这样做的方法是不好的做法。这并不意味着t = t[1:]总体上是不好的做法。
此外,还可以使用t[:] = t[1:]修改原始列表。
有很多情况下,要么是del t[0]要么是t = t[1:]是罚款的,还有很多情况下,del t[0]是错误的,t = t[1:]是适当的。
您可以使用t.pop(0),这将返回第一个元素的值并将其从列表中删除。
@darvark-op并没有要求其他方法从列表中删除项目,而是询问修改原始列表和创建新列表的用例。
这不是一个好主意有多种原因:
创建一个新列表只需要做一些不必要的工作来创建新列表和取消分配旧列表。在这两个步骤之间,两次使用内存(因为原始列表和新列表同时处于活动状态,就在分配之前)。
如果有其他内容引用同一个列表,则不会更新:u = t; del t[0]同时更改u和t。但u = t; t = t[1:]在保持u不变的情况下将新列表分配给t。
最后,与不透明的t = t[1:]相比,del t[0]更清楚地说明了其去除元素的强度。
我认为t[:] = t[1:]可以用来改变现有的list对象,但它必须做大约两倍于del t[0]的工作,因为del操作只需要将所有后续的list项下移,而t[1:]必须将后续的项复制到新的list,然后将它们复制回原始的list对象。对吗?
考虑具有两个实现的函数:
def remove_first_a(t):
t = t[1:]
def remove_first_b(t):
del t[0]
现在,请参见正在使用的功能:
> l = [1, 2, 3]
> remove_first_a(l)
> l
[1, 2, 3]
> remove_first_b(l)
> l
[2, 3]
号
第一个实现只重新分配局部变量t,它对作为参数传递的对象没有影响。第二个实现实际上改变了该对象。第一个函数在其当前形状中相当无用。你可以改变它:
def remove_first_a(t):
return t[1:]
> l = [1, 2, 3]
> x = remove_first_b(l)
> x
[2, 3]
你想要一个还是另一个,更多地取决于实际的用例。有时,您希望原始的EDOCX1[1]保持不变以供以后使用,有时您希望确保在仍然引用它的所有地方更改原始的。
只是del和slice的一个例子。
In [28]: u = t = [1, 2,3,4]
In [30]: id(u) == id(t) # now the id is same,they point one obj
Out[30]: True
。
如果我们使用del运算符。
In [31]: del t[0]
In [32]: t
Out[32]: [2, 3, 4]
In [33]: u
Out[33]: [2, 3, 4]
但是如果我们使用slice操作符。
In [35]: t = t[1:]
In [36]: t
Out[36]: [2, 3, 4]
In [37]: id(t) == id(u)
Out[37]: False
In [39]: u
Out[39]: [1, 2, 3, 4]
。
我们发现T和U现在指向不同的对象,所以我们处理列表T,列表U不变。
-
python怎么删除列表的第一个元素?
2021-01-09 11:34:07我们以一个字符串为元素类型的 list 为例,进行列表元素的删除: >>> l = ['no surfing', 'flippers'] 法一:remove(val) >>> l.remove('no surfing') >>> l ['flippers'] (1...我们以一个字符串为元素类型的 list 为例,进行列表元素的删除:
>>> l = ['no surfing', 'flippers']
法一:remove(val)
>>> l.remove('no surfing') >>> l ['flippers']
(1)remove() 的参数是具体的元素值,而不是索引,
(2)如果知道索引,如何使用 remove 删除该索引上的元素值,
>>> l.remove(l[1])
这样做是很大的风险的,因为 list 允许重复,remove() 删除的列表中第一个和参数值相等的元素
法二:pop(0)
(1)pop() 接收的是索引,无参的情况下删除的是最后一个元素(典型的栈的特性)
(2)pop() 存在返回值,返回的是删除的元素值
l.pop() <==> l.pop(-1)
(3)list 的 append()(添加到尾部),pop()(从尾部弹出),成功地将 list 变成了 stack
法三:del(l[0])
>>> del(l[0])
-
python 删除list中的第一个元素
2021-01-10 08:54:121.默认删除最后一个元素.pop()中也可以传入参数,为list的索引 2.pop() 接收的是索引,无参的情况下删除的是最后一个元素(典型的栈的特性) 3.pop() 存在返回值,返回的是删除的元素值 list=[11,12,13,14,15] ...目录
1.python 删除list中元素三种方式(一般)
1. pop()
1.默认删除最后一个元素.pop()中也可以传入参数,为list的索引
2.pop() 接收的是索引,无参的情况下删除的是最后一个元素(典型的栈的特性)
3.pop() 存在返回值,返回的是删除的元素值list=[11,12,13,14,15]
list=[11,12,13,14,15] list.pop() print(list.pop()) print(list) #output 14 [11, 12, 13]
2.del
list=[11,12,13,14,15] del(list[1]) print(list) #output [11, 13, 14, 15]
3.remove
remove() 的参数是具体的元素值,而不是索引,
list=[11,12,13,14,15] list.remove(11) print(list) #output [12, 13, 14, 15]
2.嵌套数组删除存在的问题
存在于嵌套list中, 如果list1中的一个元素发生改变,list0也会变化.
目的:list0生成后不随list1的改变而改变if(len(first_images)==12): #获取到了1分钟内的12个图像 grey_images.append(to_grey(first_images)) first_images.clear() if(len(grey_images)==5): #获得了5分钟的图片 images.append(grey_images) print("image1前的shape:") arr1 = np.array(images) print(arr1.shape) del(grey_images[0]) print("image1之后的shape:") arr1 = np.array(images) print(arr1.shape)
结果:image1前的shape和image1之后的shape并不一样.删除元素后比之前的少了一个元素.因为list存放的是索引,并不是实际的值
思路:将索引改为实际的值,然后再删除
具体步骤:
1.创建一个新的数组
2.对原数组的元素依次放入新数组中.
3.对原数组进行元素删除.
这样新数组的值并不会发生改变.因为新数组的元素不再是引用,而是实际的值if(len(first_images)==12): #获取到了1分钟内的12个图像 grey_images.append(to_grey(first_images)) first_images.clear() if(len(grey_images)==5): #获得了5分钟的图片 grey_images_val=[] for t in range(5): grey_images_val.append(grey_images[i]) images.append(grey_images_val) print("grey的length:") print(len(grey_images)) print("image1前的shape:") arr1 = np.array(images) print(arr1.shape) grey_images.pop() print("image1之后的shape:") arr1 = np.array(images) print(arr1.shape)
结果:image1前的shape和image1之后的shape此时相同
-
python 删除list中的第一个元素 坑
2019-12-08 13:01:541.默认删除最后一个元素.pop()中也可以传入参数,为list的索引 2.pop() 接收的是索引,无参的情况下删除的是最后一个元素(典型的栈的特性) 3.pop() 存在返回值,返回的是删除的元素值 list=[1... -
Python list列表中删除多个重复元素操作示例
2020-12-05 15:17:15具体如下:我们以下面这个list为例,删除其中所有值为6的元素:l=[9,6,5,6,6,7,8,9,6,0]首先尝试remove方法:l.remove(6)print(l)结果为:[9, 5, 6, 6, 7, 8, 9, 6, 0],只删除了第一个为6的元素。如果采用for循环... -
从另一个列表中删除一个列表中出现的所有元素
2020-06-29 09:47:31Let's say I have two lists, l1 and l2 . 假设我有两个列表l1和l2 。 I want to perform l1 - l2 , which returns a -
python-----删除列表中某个元素的3种方法
2020-11-20 19:10:18python中关于删除list中的某个元素,一般有三种方法:remove、pop、del:1.remove: 删除单个元素,删除首个符合条件的元素,按值删除举例说明:>>> str=[1,2,3,4,5,2,6]>>> str.remove(2)>>> str[1, 3, 4, 5, 2, 6]2.... -
python实现删除列表中某个元素的3种方法
2020-11-22 16:28:43python中关于删除list中的某个元素,一般有三种方法:remove、pop、del:1.remove: 删除单个元素,删除首个符合条件的元素,按值删除举例说明:>>> str=[1,2,3,4,5,2,6]>>> str.remove(2)>>> str[1, 3, 4, 5, 2, 6]2.... -
在Python中按索引删除列表中的多个元素,python,通过,index,list
2021-02-10 00:51:47python中删除‘指定值的元素’可以...例子:idx = [0, 1, 2]a = ['a', 'b', 'c', 'd', 'e', 'f']问题:删除idx中元素作为索引的a中的元素。1、如果写为:for i in idx:del a[i]这样是错误的,因为随着a中的元素被... -
Python | 删除列表中第一次出现的给定元素的程序
2020-06-24 11:04:23Python program to remove first occurrence of a given element in the list: Given a list of the elements and we have to remove ... Python程序删除列表中给定元素的第一次出现:给定元素列表,我们必须删除... -
js删除数组中第一个元素方法总结
2020-01-01 20:17:44删除 arr 的第一个元素,不修改 arr。 返回新的数组 newArr newArr = [2, 3, 4, 5]; 方法 1、slice() 浅克隆去复制 arr 元素从第二个开始到最后一个 var arr = [1, 2, 3, 4, 5]; var newArr = arr.slice(1); console... -
删除列表元素的几个方法
2020-11-21 19:03:481.remove: 删除单个元素,删除首个符合条件的元素,按值删除 举例说明: >>> str=[1,2,3,4,5,2,6] >>> str.remove(2) >>> str [1, 3, 4, 5, 2, 6] 2.pop: 删除单个或多个元素,按位删除... -
在列表中删除元素的三种方法
2020-04-06 19:47:54在列表中删除元素的方法有三种 (1)del: 根据下标进行删除 (2)pop: 删除最后的一个元素 (3)remove: 根据元素的值进行删除 1,使用 del 删除列表 使用 del 语句,既可以删除指定下标的列表元素,也可以直接将... -
unity 删除列表中多个元素(物体) 并在列表中移除
2021-09-26 18:30:52先删除第一个,这个时候在列表中清除掉 然后我所需要删除的第二个物体,这时已经移动到了第一个位置上,所以第二个物体没有被删除掉, 解决方法‘ 倒叙遍历删除 先删第二个,并移除 再删第一个 ,并移除 List<... -
【Python】使用while循环,删除一个列表中重复的元素
2020-08-19 23:48:04刚刚开始学习Python,也是第一次使用CSDN,记录一下自己学习的过程。 前提: 1.不创建新的列表,只在当前列表中循环判断 2.只使用了while循环和if判断 name_list = ["AA", "BB", "CC", "AA", "AA", "CC"] a = 0 d = ... -
从列表中删除元素的方法
2020-09-20 23:10:35在列表中删除元素可以使用del、方法pop()、方法remove()。 -
Python list列表删除元素(4种方法)
2022-03-20 22:44:24Python list列表删除元素(4种方法) 在 Python 列表中删除元素主要分为以下 3 种场景: ...del 是 Python 中的关键字,专门用来执行删除操作,它不仅可以删除整个列表,还可以删除列表中的某些元素。我们已经 -
如何快速删除list中的最后一个元素?
2021-03-13 13:44:05(前言: 在项目中,在统计在线用户量及其行为方式的时候,想在项目如“/bob/recode/online”,结果发现...即:”/bob/report/online“.)再回到题目上来,删除list中的最后一个元素,看下面:可以使用lists:sublist(L,... -
如何删除数组中的一个元素
2018-09-17 18:10:17第一种:删除数组中指定位置的元素: 方法一: import java.util.Arrays; import java.util.Scanner; public class test { public static void main(String[] args) { int []n=new int[] {1,2,3}; ... -
Python基础--list列表删除元素
2020-12-03 21:55:11列表中删除元素主要分为以下 3 种场景:根据目标元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法;根据元素本身的值进行删除,可使用列表(list类型)提供的 remove() 方法;将列表中所有元素全部... -
python 列表删除所有指定元素的方法
2020-12-06 11:37:22a = [1,1,1,2,3,45,1,2,1]a.remove(1)result: [1,1,2,3,45,1,2,1]while 1 in a:a.remove(1)result: [2,3,45,2]以上这篇python 列表删除所有指定元素的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也... -
数据结构删除顺序表中第i个元素
2021-03-10 23:11:50数据结构删除顺序表中第i个元素 #include <stdio.h> #define MaxSize 10 typedef struct { int data[MaxSize]; int length; }sqlist; sqlist L; bool listdelete(sqlist& l, int i, int& e) { if ... -
Python3---对列表删除的三种方式 & 列表的正序遍历与倒序遍历 & 删除多个相同元素
2022-03-25 15:34:371.Python3中对列表删除的三种方式 2.列表的正序遍历与倒序遍历过程的分析 3.删除列表中多个相同元素的方法 -
在Python中获取列表的最后一个元素
2021-02-10 01:01:34要获得最后一个元素,而不修改列表,和假设您知道列表中有最后一个元素(即它是非空的)将 -1 传递给下标符号:>>> a_list = ['zero', 'one', 'two', 'three']>>> a_list[-1]'three'解释索引和切片... -
在python中,使用for遍历列表后删除列表中元素,列表中元素删不干净的问题
2020-01-05 22:51:13user=['zhao','qian','sun','li...这是由于当user中的第一个元素赋值给name后,将指针指向下一个元素,但是当删除第一个元素后,剩下的元素会按顺序一次向前移动一位,所以列表输出到最后,只删掉了第一个元素,和第... -
python中list列表删除元素的4种方法
2022-04-29 09:53:06在python列表中删除元素主要分为以下3种场景: 根据目标元素所在的索引位置进行删除,可以使用del关键字或pop()方法; 根据元素本身的值进行删除,可使用列表(list类型)提供的remove()方法; 将列表中所有元素... -
php--------删除数组的第一个元素和最后一个元素
2018-01-19 09:14:11对于一个php数组,该如何删除该数组的第一个元素或者最后一个元素呢?其实这两个过程都可以通过php自带的函数 array_pop 和 array_shift 来完成,下面就具体介绍一下如何来操作。(1)使用 array_pop 删除数组的最后...