關於[第012讲:列表:一个打了激素的数组3 | 课后测试题及答案]
1.old =
new = old
old.sort(reverse=True)
old=
print(new)
print(old)
得到結果
問題:
雖然看了小甲魚的解釋,但還是不太懂,
為啥old.sort(reverse=True)會影響到new,
但old=不會影響到new,
有人可以更詳細的解釋一下嗎?
2.
list1 = ["1.Just do it", "2.一切皆有可能", "3.讓編程改變世界", "4.Impossible is nothing"]
list2 = ["4.阿瑪迪斯", "2.李寧", "3.魚C", "1.耐克"]
list3 = for slogan in list1 for name in list2 if slogan == name]
for each in list3:
print(each)
得到結果
1.耐克:Just do it
2.李寧:一切皆有可能
3.魚C:讓編程改變世界
4.阿瑪迪斯:Impossible is nothing
問題:
看不懂這條
list3 = for slogan in list1 for name in list2 if slogan == name]
為什麼slogan後面要加?
為什麼有這條if slogan == name?該條造成什麼影響?
為什麼不會是打印出以下結果?
1.耐克:1.Just do it
2.李寧:2.一切皆有可能
3.魚C:3.讓編程改變世界
4.阿瑪迪斯:4.Impossible is nothing 第一个问题:
old.sort(reverse=True)会影响到old是因为该方法是操作的old变量所指向的内存里面的值。
而old=,此时重新给old赋值,这时的old所指向的内存已更改,你可以在old两次赋值后分别用id(old)来查看,会发现他们虽然是同一个变量名,但是内存地址不一样!之前的内存地址在你第二次赋值后,之前的内存地址失去了名字,不能再调用到它了。python有内存处理方法,会清理掉它,这个你现在先不必深究。
同理你可以试试
a=1
id(a)
a=2
id(a)
你会发现一些惊喜
第二个问题:
slogan,为什么这样写,你得先看 for slogan in list1 for name in list2这两句的意思,明白slogan此时是指list1中的一个单独字符串。而slogan是指从该字符串第三个元素开始,所以输出时没有前面的1.
if slogan == name就是判断两个字符串中的第一个元素是否相等,也就是为了两两个串中的1和1配对,2和2配对…
这句代码涉及到的知识有:条件表达式、列表切片,字符串,列表几项内容,有时间的话可以回顾一下 第三个问题:大晚上的纯手打,觉得有用的话给个好评,哈哈
有理解不到的,继续问就好了 第一个问题:
old = #第一次赋值
new = old #将old 赋值给new 这行代码就等价与new =
old = #这里你的old重新赋值,就会覆盖原本的old 变量,但是new 来源还是
print(new)
你可以这样做
old =
new = old #他们的根本来源都是
new.append(6)
print(old)
同理:
old =
new = old #他们的根本来源都是
old.append(6)
print(new)
python中 变量都有id (通俗说就是来源,id(new)可以查询new的id)
id相同 他们就相当于捆绑在一起了 其中一个改变 另一个也会随之改变就像 量子纠缠
而你后面是 old = 是重新给old 赋值 python 就会重新赋予他一个id 就和先前的id 不同 new id 还是原来的old = 时候的id
而 copy 也就是浅拷贝,相当于只拷贝列表本身,但是内部的可变元素并没有与之拷贝成新的
同理 列表的大部分方法(如 romove、pop、insert、append、sort等)都是在原列表上进行改变的,只改变本源,导致与其相关的都一起发生改变
第二个问题
先帮你解析下整个题目吧,希望你能更了解了解列表推导式
举几个例子吧(假设已经给出了列表 ls1,ls2):
temp =
最简单的列表推导式:将 遍历 ls1中的元素 依次赋值给 x 加入列表中去
可以分解成:
temp = []
for x in ls1:
temp.append(x)
temp =
将遍历ls1中的元素,将符合条件的元素加的列表中
可以分解成这样:temp = []
for x in ls1:
if <条件>:
temp.append(x)
temp =
将 x 遍历 ls1 中的元素,然后 i 遍历 ls2 的元素 将符合条件后的 x+i 的结果依次加入列表中
可以分解成这样:temp = []
for x in ls1:
for i in ls2:
if <条件>:
temp.append(x+i)
list3= for slogan in list1 for name in list2 if slogan == name]
所以你的这题可以分解成这样:
list3=[]
for slogan in list1:
for name in list2:
if slogan==name:
list3.append(name + ':'+ slogan)
為什麼slogan後面要加?
你随便拿两个元素出来就知道了,随便哪个元素假设:slogan = '1.Just do it'那么 slogan 就等于 'Just do it'
然后拿去和 name 进行拼接,因为一行就需要一个编号就可以了,如果不去掉那么结果会变成你那样不美观滴,主要是为了美观
為什麼有這條if slogan == name?該條造成什麼影響?
用于循环判断 他们的 第一个字符,就是编号是否相同,只把相同的拼接在一起,所以起到的作用很大,比如1.耐克 和 2.一切皆有可能 他们就不会拼接一起
因为字符串 '1' != '2' 而 '1.耐克' 和'1.Just do it' 因为编号相等,所以就拼接在一起了
页:
[1]