如何从元组列表中删除所有字符串

时间:2019-01-16 14:04:21

标签: python list tuples

我正在尝试从元组列表中删除所有字符串

ListTuples = [(100, 'AAA'), (80, 'BBB'), (20, 'CCC'), (40, 'DDD'), (40, 'EEE')]

我已经开始尝试寻找解决方案:

output = [i for i in ListTuples if i[0] == str]

print(output)

但是我似乎无法理解如何获得这样的输出:

[(100), (80), (20), (40), (40)]

格式始终为(intstr)。

5 个答案:

答案 0 :(得分:9)

使用嵌套元组理解和isinstance

output = [tuple(j for j in i if not isinstance(j, str)) for i in ListTuples]

输出:

[(100,), (80,), (20,), (40,), (40,)]

请注意,元组中有尾部逗号,以将其与例如(100)100相同。

答案 1 :(得分:2)

由于提取每个元组的第一项就足够了,因此您可以解压缩并使用列表推导。有关元组的列表:

res = [(value,) for value, _ in ListTuples]  # [(100,), (80,), (20,), (40,), (40,)]

如果您只需要整数列表:

res = [value for value, _ in ListTuples]     # [100, 80, 20, 40, 40]

要获得后者的功能替代方法,可以使用operator.itemgetter

from operator import itemgetter
res = list(map(itemgetter(0), ListTuples))   # [100, 80, 20, 40, 40]

答案 2 :(得分:1)

这是使用filter()的另一种解决方案:

def non_string(x):
    return not isinstance(x, str)

print([tuple(filter(non_string, x)) for x in ListTuples])
# [(100,), (80,), (20,), (40,), (40,)]

答案 3 :(得分:0)

尝试一下

ListTuples = [(100, 'AAA'), (80, 'BBB'), (20, 'CCC'), (40, 'DDD'), (40, 'EEE')]

ListInt = []
ListStr = []

for item in ListTuples:
    strAux = ''
    intAux = ''
    for i in range(0, len(item)):

        if(isinstance(item[i], str)):
            strAux+=item[i] 
        else:
            intAux+=str(item[i])


    ListStr.append(strAux)
    ListInt.append(intAux)


print(ListStr)

'''TO CONVERT THE STR LIST TO AN INT LIST'''
output= list(map(int, ListInt)) 
print(output)

输出为[100, 80, 20, 40, 40]

答案 4 :(得分:0)

我们使用type(value)检查特定值是否为字符串。

output = [tuple([j for j in i if type(j)!=str]) for i in ListTuples]
print(output)
    [(100,), (80,), (20,), (40,), (40,)]