第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

一開始理解成L和S都有的數(shù)字,就從L中刪除,把剩下的數(shù)字傳給S,即L→L(2,4,6,8,10, S={1,2,3,4,5,6,7,8,9,10,11},就寫了下面的代碼,為什么用debug調(diào)試 ,num的數(shù)值只經(jīng)過1,3,5,7,9,沒有2,4,6,8?

L?=?[1,?2,?3,?4,?5,?6,?7,?8,?9,?10]
S?=?set([1,?3,?5,?7,?9,?11])

for?num?in?L:
????if?num?in?S:
????????L.remove(num)
????else:
????????S.add(num)

print(L)????#?L=[2,?4,?6,?8,?10]
print(S)????#?S?={1,?3,?5,?7,?9,?11}


正在回答

3 回答

那答案中的remove為什么沒有向前移動

0 回復(fù) 有任何疑惑可以回復(fù)我~

對于python中的remove()函數(shù),官方文檔的解釋是:Remove first occurrence of value.大意也就是移除列表中等于指定值的第一個匹配的元素。
常見用法:?a = [1,2,3,4],a.remove(1),然后a就是[2,3,4];對于a = [1,1,1,2],其結(jié)果也是[1,1,2],這是最基本的用法。
但是對于下面這個:

a?=?[1,2,3,4]
for?i?in?a:
??????a.remove(i)#?結(jié)果a?=?[2,4]

或者說

a?=?[1,1,1,1,1,2]
for?i?in?a:
??????a.remove(1)#結(jié)果a?=?[1,1,2]
是不是跟想象中的不一樣,其主要原因如下(^表示當前迭代器位于列表中的位置):
???a?=?[?1?,?2?,?3?,?4]
假設(shè)此時??^
默認情況下只想第一個元素,然后執(zhí)行a.remove(1),然后下標向后移動,列表因為刪除了元素,后面的向前移動,如下:
???a?=?[?2?,?3?,?4]
???此時???????^
此時執(zhí)行a.remove(3),重復(fù)上面的移動
???a?=?[?2?,?4]
???此時???????????^
因為已經(jīng)到了列表的邊界,故結(jié)束遍歷,并返回`a?=?[2,4]`。


0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕UI7540685 提問者

那答案中的remove為什么沒有向前移動
2020-10-14 回復(fù) 有任何疑惑可以回復(fù)我~
#2

慕UI7540685 提問者

懂了,多謝
2020-10-14 回復(fù) 有任何疑惑可以回復(fù)我~

問題說的有點亂,我重新梳理了下: 如果將答案里面的if i in S:S.remove(i),改成 if i in S: L.remove(i),得到如下代碼:

L?=?[1,?2,?3,?4,?5,?6,?7,?8,?9,?10]???????????????????????????
S?=?set([1,?3,?5,?7,?9,?11])
for?i?in?L:
????if?i?in?S:
????????L.remove(i)?
????else:
????????S.add(i)
print(S)????????

通過pycharm的debug發(fā)現(xiàn),這時候的for?i?in?L?里的i=(1,3,5,7,9),而不像答案的i?=(1,2,3,4,5,6,7,8,9,10),求大佬告知為這是為什么




0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

一開始理解成L和S都有的數(shù)字,就從L中刪除,把剩下的數(shù)字傳給S,即L→L(2,4,6,8,10, S={1,2,3,4,5,6,7,8,9,10,11},就寫了下面的代碼,為什么用debug調(diào)試 ,num的數(shù)值只經(jīng)過1,3,5,7,9,沒有2,4,6,8?

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號