PYTHON FOR 和 LIST 的使用

2021-08-10 16:58:34 字數 2289 閱讀 4502

t1=['a1_a2', 'a1_a3', 'a1_a4', 'a1_a5', 'a1_a6', 'a2_a1', 'a2_a3', 'a2_a4', 'a2_a5', 'a2_a6', 'a3_a1', 'a3_a2', 'a3_a4', 'a3_a5', 'a3_a6', 'a4_a1', 'a4_a2', 'a4_a3', 'a4_a5', 'a4_a6', 'a5_a1', 'a5_a2', 'a5_a3', 'a5_a4', 'a5_a6', 'a6_a1', 'a6_a2', 'a6_a3', 'a6_a4', 'a6_a5']

t2=['a2_a1', 'a5_a4', 'a6_a3']

實現目標:

t2中的各個元素,分別由兩個字元元素組成。t1中的元素組成情況相同。

現在要求是,只要在t2中出現的參與合成list元素的字元元素,都不能在t1中出現。即,t1中只要含有t2中有的字元元素,必須 remove。

考慮如下指令碼實現:

#!/usr/bin/python

# -*- coding: utf-8 -*-

def check_str(str1,str2): ##字串對比,檢視是否有重複

s1=''.join(str1)

s2=''.join(str2)

if (s1.split('_'))[0]==(s2.split('_'))[0] or (s1.split('_'))[1]==(s2.split('_'))[1] or \

(s1.split('_'))[0]==(s2.split('_'))[1] or (s1.split('_'))[1]==(s2.split('_'))[0]:

return 0

else:

return 1

def delete_list(list1,list2):

for i in list1:

s=''.join(i)

for j in list2:

q=''.join(j)

print s,q

if check_str(s,q)==0:

list2.remove(q)

return list2

t1=['a1_a2_b1', 'a1_a3_b1', 'a1_a4_b1', 'a1_a5_b1', 'a1_a6_b1', 'a2_a1_b2', 'a2_a3_b2', 'a2_a4_b2', 'a2_a5_b2', 'a2_a6_b2', 'a3_a1_b3', 'a3_a2_b3', 'a3_a4_b3', 'a3_a5_b3', 'a3_a6_b3', 'a4_a1_b4', 'a4_a2_b4', 'a4_a3_b4', 'a4_a5_b4', 'a4_a6_b4', 'a5_a1_b5', 'a5_a2_b5', 'a5_a3_b5', 'a5_a4_b5', 'a5_a6_b5', 'a6_a1_b6', 'a6_a2_b6', 'a6_a3_b6', 'a6_a4_b6', 'a6_a5_b6']

t2=['a2_a1_b2', 'a5_a4_b5', 'a6_a3_b6']

print delete_list(t2,t1),t2 #列印處結果

按理說,t1中的元素應該是被全部被 remove的,但是實際結果是:

核查原因是:

for 迴圈在處理list時,是根據list中的位置來取值的。

當listx.remove(i) 時,刪除了 listx[i] 元素a,後面的元素自動遞補,補充上來。原來 listx[i+1] 位置的元素b,現在成了位置 listx[i] 。

listx[i+1]的元素成了遞補上來的 c,

for在 處理完 listx[i] 後,處理 listx[i+1] 時,取到 的元素就是c。跳過了元素 b

解決辦法:

修一下處理函式 delete_list 中的處理邏輯:

不要直接remove。

新建立乙個list: list3,使用者儲存在 list2中存在的含有 list1 中字元元素的元素。

迴圈完成後,在對 list3 和 list2 做一下 差集,list2 - list3,存入 list4中返回即可

def delete_list(list1,list2):

list3=

list4=

for i in list1:

s=''.join(i)

for j in list2:

q=''.join(j)

print s,q

if check_str(s,q)==0:

if q not in list3:

for e in list2:

if e not in list3:

return list4

python for和操作列表(4)

函式 range 生成一系列數字,但從指定第乙個值開始,在到達指定的第二個值之後停止,所以輸出不包含第二個值。使用函式list 可將range 的結果直接轉化為列表。且函式range 還可以指定步長。min 找出數字列表的最小值。max 找出數字列表的最大值。sum 計算數字列表的總值。語句 for...

List和List 的用法

list理解為容器,list裡面裝的是object,list 裡面裝的就是前面宣告的list。舉例 取出所有角色為客服的人員,客服的role sn為3 listmanagerlist managerservice.getmanagerlistbyrole 3 取出每個人所含有的所有角色,list裡裝...

python for迴圈的使用

for 變數 in range 10 迴圈需要執行的 else 迴圈結束時,需要執行的 range stop 0 stop 1 range start,stop start stop 1 range start,stop,step start stop step 步長 測試 range 5 0,1,...