Как удалить все строки из списка Python кортежей - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь удалить все строки из списка кортежей

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

Ответы [ 5 ]

0 голосов
/ 16 января 2019

Мы проверяем, является ли конкретное значение строкой или нет, используя type(value).

output = [tuple([j for j in i if type(j)!=str]) for i in ListTuples]
print(output)
    [(100,), (80,), (20,), (40,), (40,)]
0 голосов
/ 16 января 2019

Попробуйте это

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]

0 голосов
/ 16 января 2019

Поскольку достаточно извлечь первый элемент каждого кортежа, вы можете распаковать его и воспользоваться списком. Для списка кортежей:

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]
0 голосов
/ 16 января 2019

Вот еще одно решение, использующее 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,)]
0 голосов
/ 16 января 2019

Используйте понимание вложенного кортежа и isinstance:

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

Выход:

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

Обратите внимание, что в кортежах есть запятые, чтобы отличать их от, например, (100), что идентично 100.

...