一个python中嵌套列表的问题,下图中的两种写法,结果不一样,这是为什么?

来自:    更新日期:早些时候
python中如何根据嵌套列表内的元素进行排序~

# -*- coding: utf-8 -*-import operatortarget_list = [["A",3],["B",2],["C",1]]'''sorted默认为从小到大排序,如果从大到小,请使用:target_list.sort(key=operator.itemgetter(1), reverse=True) '''target_list.sort(key=operator.itemgetter(1)) print(target_list)
楼主你好,按以上代码就可以得到想要的结果。

python本身还提供了非常丰富的排序功能,该需求还有另外的形式能够实现,请自行阅读官方文档研究。望采纳,谢谢!

参考资料:https://docs.python.org/2/howto/sorting.html#sortinghowto

这个叫元组的拆包或解包。
list1迭代返回的是元组,那么for循环内就是
m,n = ('c',1)
m,n = ('Python',2)
...

题主你好,

我说下我的理解, 这个要从内存分配上去看了.

[0]* 3 得到的结果是: [0,0,0], 这里面3个0是被分配的不同内存地址,而

[[0]] * 3,得到的结果是: [[0],[0],[0]],这里面3个[0]在内存中指的其实是一个地址,你可以将后两个[0]理解为第1个[0]的两个别名.

换个说法: [0]* 3 得到的结果[0,0,0]你将里面的3个0理解为: 张三,李四,王五,这是3个人, 你改其中的一个对另两个人是没有影响的. 而

[[0]]*3 得到的结果[[0],[0],[0]]你可以理解为:张三,小张,阿三,其中小张和阿三是张三的两个小名, 这三个[0]其实是1个人, 所以你改变其中一个[0],另外的两个[0]肯定也会跟着变.

而你直接写[[0],[0],[0]],可以理解为这三个[0]是三个不同的人.

至于为什么[[0]]*3得到的是[[0],[0],[0]], 而直接定义[[0],[0],[0]]看着是一样, 但当修改元素值的时候,得到的结果却不同,这就是python的实现机制了,不用太纠结这个,因为python就是这样设计的,你只需要明白这个逻辑,用的时候会用就好.

写在最后: 这只是我自己的理解, 没有理论依据,希望不会误导题主.

希望可以帮到题主, 欢迎追问.

修正后的回答:

使用 "threeZeros=[0] * 3" 这样的语法, 语句执行完,初始状态下, 内存中只会创建一个对象, 然后将3个元素的地址都指向该对象, 即此时内存中只会创建一个对象, 赋值为0, 然后将threeZeros[0], threeZeros[1],threeZeros[2]这三个元素都指向该地址, 即此时id(threeZeros[0])==id(threeZeros[0])==id(threeZeros[0])

当我们对初始化化的threeZeros中的元素单独赋值时, 会在内存中新开辟一块空间创建一个新对象, 因此, 当我们执行完

threeZeros[0] = 3

你会发现, id(threeZeros[0])的地址改变了, 但id(threeZeros[1])和id(threeZeros[2])没变, 因为你只改变了threeZeros[0]元素的指向.





这确实是个比较神奇的问题,等高手


一个python中嵌套列表的问题,下图中的两种写法,结果不一样,这是为什么?视频

相关评论:
  • 18779825144python 解嵌套的list
    印柴居import itertoolslst_all = [['A','Blue'],['A','Green'],['A','Yellow'],['B','Red'],['C','Red'],['C','White']]collector = []for k, lstgroup in itertools.groupby(sorted(lst_all), lambda x: x[0])

  • 18779825144python中flat将嵌套列表中的元素按顺序排列在一个列表中
    印柴居按照你的要求编写的Python程序如下 def flat(nestedlist):outcome = [nestedlist[i][j] for i in range(len(nestedlist)) for j in range(len(nestedlist[i]))]return outcome print(flat([[1,2,3],[4,5,6],[7,8,9]]))源代码(注意源代码的缩进)...

  • 18779825144python可以嵌套多少层(2023年最新分享)
    印柴居[print(str(i?+?1)?+?':'?+?j)?for?i,?j?in?enumerate(result)]??#?打印结果 '''结果:1:路径是:?Large_dict-middle_dict1-middle_dict2-small_dict3,在第3层 2:路径是:?Large_dict-middle_dict1-middle_dict2-small_dict5-small_dict22,在第4层 '''python列表中可以嵌套多少...

  • 18779825144如何实现python中嵌套列表中所有列表中第一个值输出
    印柴居实现python中嵌套列表中所有列表中第一个值输出用data["items"][0]["id"]。

  • 18779825144python中如何根据嵌套列表内的元素进行排序
    印柴居''target_list.sort(key=operator.itemgetter(1)) print(target_list)楼主你好,按以上代码就可以得到想要的结果。python本身还提供了非常丰富的排序功能,该需求还有另外的形式能够实现,请自行阅读官方文档研究。望采纳,谢谢!参考资料:https:\/\/docs.python.org\/2\/howto\/sorting.html#sortinghowto ...

  • 18779825144Python教程:python中二维列表的创建、访问、应用详解
    印柴居Python教程:二维列表的创建、访问与应用详解本文将深入讲解Python中二维列表的基础知识,包括其概念、创建方法以及实际应用。首先,让我们来理解二维列表:它是列表的嵌套形式,用于存储多列数据。在Python中,二维列表的创建有以下三种常用方式:直接定义:通过嵌套列表的方式,如表示学生成绩的九年级一班3位...

  • 18779825144求Python代码
    印柴居python data = [1, 1, 2, 2, 3, 3]枚举所有可能的排列组合 for i in range(len(data)):for j in range(i+1, len(data)):for k in range(j+1, len(data)):print(data[i], data[j], data[k])这段代码首先定义了一个包含1、1、2、2、3、3的列表data。然后,它使用三个...

  • 18779825144python 列表中嵌套列表 str怎么转化为int
    印柴居il = ['1','2','3',['4','5','6'],['7','8']]flat = lambda L: sum(map(flat,L),[]) if isinstance(L,list) else [L]ol = flat(il) # output:['1', '2', '3', '4', '5', '

  • 18779825144python中怎么将嵌套列表转为字典?
    印柴居list1=[["001","小明","98"],["002","小红","88"]]list2=["学号","姓名","成绩"]list3=[]for i in range(0,2):list3.append(dict(zip(list2,list1[i])))要的东西就在list3里了

  • 18779825144python 使用嵌套的for循环创建二维列表?
    印柴居因为你一开始的arr只是一个一维列表[],所以第一个循环其实是为第二个循环准备需要用到的空列表,你要是append(x)的话相当于arr在第一层第一个循环后变成[0],然后在第二层的循环里arr[x]=arr[0]=0就是一个数,没办法append

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网