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,...