请教python列表嵌套问题?

Python017

请教python列表嵌套问题?,第1张

可以这样写:

l=[{'name':'张三','性别':'男','年龄':12,'成绩':60},{'name':'张三','性别':'女','年龄':12,'成绩':80},{'name':'李四','性别':'男','年龄':13,'成绩':75},{'name':'王五','性别':'男','年龄':12,'成绩':20}]

l=list(filter(lambda d:d['name']=='张三',l))

print(l)

这是运行截图:

题主你好,

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

[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就是这样设计的,你只需要明白这个逻辑,用的时候会用就好.

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

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

clayton_list = [ [1,2,3], [0,3], [0,4], [0,1], [2] ]

def Calling_popular(graph_list,n):

people = []

result = {}

all = []

for i in graph_list:

for j in i:

people.append(j)

people = set(people)

for z in people:

result[z] = 0

for a in graph_list:

for b in people:

if b in a:

result[b] += 1

for d in people:

if result[d] >= n:

all.append(d)

return all

a = Calling_popular(clayton_list, 2)

print(a)

a = Calling_popular(clayton_list, 3)

print(a)

a = Calling_popular(clayton_list, 0)

print(a)

输出

[0, 1, 2, 3]

[0]

[0, 1, 2, 3, 4]

变量没有用心去定义,要是你真的想学应该可以看的懂,可以问我