|
发表于 2020-6-27 08:55:42
|
显示全部楼层
- old = [1, 2, 3, 4, 5] #第一次赋值
- new = old #将old 赋值给new 这行代码就等价与 new = [1,2,3,4,5]
- old = [6] #这里你的old重新赋值,就会覆盖原本的old 变量,但是new 来源还是[1,2,3,4,5]
- print(new)
复制代码
你可以这样做
- old = [1,2,3,4,5]
- new = old #他们的根本来源都是[1,2,3,4,5]
- new.append(6)
- print(old)
- [1,2,3,4,5,6]
复制代码
同理:
- old = [1,2,3,4,5]
- new = old #他们的根本来源都是[1,2,3,4,5]
- old.append(6)
- print(new)
- [1,2,3,4,5,6]
复制代码
python中 变量都有id (通俗说就是来源,id(new)可以查询new的id)
id相同 他们就相当于捆绑在一起了 其中一个改变 另一个也会随之改变 就像 量子纠缠
而你后面是 old = [6] 是重新给old 赋值 python 就会重新赋予他一个id 就和先前的id 不同 new id 还是原来的old = [1,2,3,4,5] 时候的id
而 copy 也就是浅拷贝,相当于只拷贝列表本身,但是内部的可变元素并没有与之拷贝成新的
同理 列表的大部分方法(如 romove、pop、insert、append、sort等)都是在原列表上进行改变的,只改变本源,导致与其相关的都一起发生改变
先帮你解析下整个题目吧,希望你能更了解了解列表推导式
举几个例子吧(假设已经给出了列表 ls1,ls2):
最简单的列表推导式:将 遍历 ls1中的元素 依次赋值给 x 加入列表中去
可以分解成:
- temp = []
- for x in ls1:
- temp.append(x)
复制代码
- temp = [x for x in ls1 if <条件>]
复制代码
将遍历ls1中的元素,将符合条件的元素加的列表中
可以分解成这样:- temp = []
- for x in ls1:
- if <条件>:
- temp.append(x)
复制代码
- temp = [x+i for x in ls1 for i in ls2 if <条件>]
复制代码
将 x 遍历 ls1 中的元素,然后 i 遍历 ls2 的元素 将符合条件后的 x+i 的结果依次加入列表中
可以分解成这样:- temp = []
- for x in ls1:
- for i in ls2:
- if <条件>:
- temp.append(x+i)
复制代码
list3=[name+':'+slogan[2:0] for slogan in list1 for name in list2 if slogan[0] == name[0]]
所以你的这题可以分解成这样:
- list3=[]
- for slogan in list1:
- for name in list2:
- if slogan[0]==name[0]:
- list3.append(name + ':'+ slogan[2:])
复制代码
你随便拿两个元素出来就知道了,随便哪个元素假设:slogan = '1.Just do it' 那么 slogan[2:] 就等于 'Just do it'
然后拿去和 name 进行拼接,因为一行就需要一个编号就可以了,如果不去掉那么结果会变成你那样不美观滴,主要是为了美观
為什麼有這條if slogan[0] == name[0]?該條造成什麼影響?
用于循环判断 他们的 第一个字符,就是编号是否相同,只把相同的拼接在一起,所以起到的作用很大,比如 1.耐克 和 2.一切皆有可能 他们就不会拼接一起
因为字符串 '1' != '2' 而 '1.耐克' 和 '1.Just do it' 因为编号相等,所以就拼接在一起了
|
评分
-
查看全部评分
|