|
发表于 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' 因为编号相等,所以就拼接在一起了
|
评分
-
查看全部评分
|