我正在尝试从元组列表中删除所有字符串
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)]
格式始终为(int
,str
)。
答案 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,)]