如何在列表中删除元组内的每个元组的每个第二个字符串?

时间:2017-10-12 10:30:17

标签: python list tuples

我有以下代码(工作代码):

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

我想要做的是从元组中删除这些数字。所以我没有使用上面的代码,而是使用了:

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

但是我收到消息: ValueError:list.remove(x):x不在列表中我知道item [0]在我刚刚打印的列表中。导致此错误的原因是什么?

3 个答案:

答案 0 :(得分:3)

您不一定需要BaseActivity元素,您可以动态创建一个新的元组,其值为:

remove

答案 1 :(得分:0)

你的尝试对我来说似乎很复杂。除非我误解了你想要达到的目标,否则只需一个班轮即可。

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

答案 2 :(得分:0)

要获取列表中元组的第一个元素,可以使用以下解决方案:

对于列表中的每个元组:

  1. 将元组转换为列表a
  2. a中的第一个元素存储为列表b中的单个元素 元组
  3. E.g:

    >>> 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',))]