2017-10-12 58 views
0

我有以下代碼(工作代碼):如何刪除列表中每個元組的每一個第二個字符串?

import csv 

original_list = [('1321', '01'), ('MessageXZY', '02'), ('DescriptionSKS', '03'), ('S7_6', '04'), ('S7_3', '05'), ('0A3B', '06'), ('MessageZYA', '07'), ('DescriptionKAM', '08'), ('9K44', '09'), ('MessageYAL', '10'), 
('DescriptionAUS', '11'), ('S7_2', '12')] 

code_list = ['1321', '0A3B','9K44'] 

grouped_tuples = [] 
for entry in original_list: 
    if entry[0] in code_list: 
     new_tuple = [] 
     new_tuple.append(entry) 
     for i in range(original_list.index(entry)+1, len(original_list)): 
      if(original_list[i][0] not in code_list): 
       new_tuple.append(original_list[i]) 
      else: 
       break 
     grouped_tuples.append(tuple(new_tuple)) 

如果我再補充上:

for entry in grouped_tuples: 
    for item in entry: 
     print (item[1]) 

我得到以下列表:

01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 

我想什麼do是從元組中移除這些數字。因此,而不是使用上面的代碼,我用:

for entry in grouped_tuples: 
    for item in entry: 
     a = grouped_tuples.remove(item[1]) 
print (a) 

但是我得到的消息:ValueError異常:list.remove(X):X不在列表中我知道項[0]是列表就像我剛剛打印的那樣。什麼導致了這個錯誤?

+0

元組是不可變的,你無法從它們移除項目 - 您必須創建一個沒有該項目的新元組。 – jonrsharpe

+1

您的列表包含元組的元組 –

回答

3

你不一定需要remove的元素,你可以動態創建一個新的元組與所需的值:

>>> new_list = [(i[0],)for i in original_list] 
>>> [('1321',), ('MessageXZY',), ('DescriptionSKS',), ('S7_6',), ('S7_3',), ('0A3B',), ('MessageZYA',), ('DescriptionKAM',), ('9K44',), ('MessageYAL',), ('DescriptionAUS',), ('S7_2',)] 
+0

您也可能不需要創建1元組元組。只需返回'i [0]'而不是'(i [0])' –

+0

@EricDuminil永遠不會知道OP是否希望數據以特定格式進行進一步處理。 – ZdaR

+0

我很想知道在Python中看到1元組元組的實際應用。由於元組是不可變的,所以你可以期望調用''[0]''。 –

0

你嘗試似乎很令人費解給我。除非我誤解了你正在努力達到的目標,否則一個班輪就足夠了。

[(k,) for (k,v) in original_list if k in code_list]

0

爲了得到一個列表中的元組的第一個元素,一個解決辦法是:

對於列表中的每個元組:

  1. 轉換的元組列表a
  2. a中的第一個元素存儲爲列表中的單個元素b 元組

如:

>>> a=[("x","z"),("y","z")] 
>>> b=[(list(x)[0],) for x in a] 
>>> b 
[('x',), ('y',)] 

使用這個概念,你的代碼給出:

>>> grouped_tuples 
[(('1321', '01'), ('MessageXZY', '02'), ('DescriptionSKS', '03'), ('S7_6', '04'), ('S7_3', '05')), (('0A3B', '06'), ('MessageZYA', '07'), ('DescriptionKAM', '08')), (('9K44', '09'), ('Messag 
eYAL', '10'), ('DescriptionAUS', '11'), ('S7_2', '12'))] 
>>> #preserve grouped_tuples 
... tmpGroupedTuples=list(grouped_tuples) 
>>> tmpGroupedTuples_len=len(tmpGroupedTuples) 
>>> for i in range(0,tmpGroupedTuples_len): 
...  cOuterTuple=list(tmpGroupedTuples[i]) 
...  cOuterTupleLen=len(cOuterTuple) 
...  newOuterTuple=[] 
...  for j in range(0,cOuterTupleLen): 
...    cInnerTuple=list(cOuterTuple[j]) 
...    newInnerTuple=((cInnerTuple[0],)) 
...    newOuterTuple.append(newInnerTuple) 
...  tmpGroupedTuples[i]=tuple(newOuterTuple) 
... 

tmp_grouped_tuples現在包含包含包含grouped_tuples原內的元組的第一個元素內的元組外的元組:

>>> print(tmpGroupedTuples) 
[(('1321',), ('MessageXZY',), ('DescriptionSKS',), ('S7_6',), ('S7_3',)), (('0A3B',), ('MessageZYA',), ('DescriptionKAM',)), (('9K44',), ('MessageYAL',), ('DescriptionAUS',), ('S7_2',))] 
相關問題