Как выполнить поиск в строке, содержащей строки, и создать новый массив только с целыми числами - PullRequest
0 голосов
/ 27 марта 2019

Если у меня есть массив, который содержит только строки, но некоторые из них являются числами, как мне выполнить поиск в массиве, определить, какие строки на самом деле являются числами, и добавить эти числа в новый массив?Пример массива следующий: ["Chris", "90", "Dave", "76"]

Я пытался использовать цикл for для последовательного использования isdigit () для каждого индекса, иесли это правда, добавить этот элемент в новый массив.

scores = []
    for i in range(len(name_and_score_split)):
        if name_and_score_split[i].isdigit() == True:
            scores.append(name_and_score_split[i])

Когда приведенный выше код запускается, он говорит мне, что тип данных списка не имеет функции "isdigit" edit: iv'e обнаружил, что мойПроблема в том, что список на самом деле является списком списков.

Ответы [ 3 ]

2 голосов
/ 27 марта 2019

Используйте списочное понимание, а также используйте для каждого свойства Python for вместо перебора индексов:

lst = ["Chris" , "90" , "Dave" , "76"]

scores = [x for x in lst if x.isdigit()]
# ['90', '76']

Альтернативно, filter ваш список:

scores = list(filter(lambda x: x.isdigit(), lst))
0 голосов
/ 27 марта 2019

Если вы хотите список int:

s = ["Chris", "90", "Dave", "76"]
e = [int(i) for i in s if i.isdigit()]
print(e)
# OUTPUT: [90, 76]
0 голосов
/ 27 марта 2019

Предполагая, что вы пытаетесь, если для целых чисел вы можете сделать что-то вроде:

// Взят из и изменение float на int.

def is_number(s):
    try:
        int(s)
        return True
    except ValueError:
        return False

Тогда вы можете сделать

[x for x in name_and_score_split if is_number(x)]
...