Используйте операцию «Findall» для массива строк Python

#python #arrays #string #findall

#python #массивы #строка #findall

Вопрос:

У меня есть набор данных размером более 1 млн строк, и каждая строка содержит комбинацию строчных / прописных букв, символов и цифр. Я хочу очистить эти данные и сохранить только последний экземпляр, в котором строчная буква и цифра находятся рядом друг с другом. Для повышения скорости мой текущий план состоял в том, чтобы иметь эти данные в виде массива строк, а затем использовать операцию .findall для сохранения комбинации букв и цифр, которую я ищу.

Вот что-то вроде того, что я пытаюсь сделать:

Ввод

 list = Array(["Nd4","0-0","Nxe4","e8 ","e4g2"])

newList = list.findall('[a-z]d')[len(list.findall('[a-z]d')-1]
  

Ожидаемый результат от нового списка

 newList = ("d4","","e4","e8","g2")
  

Ответ №1:

Не рекомендуется использовать «list» для назначения переменной, поскольку это встроенная функция

 import re
import numpy as np

lists = np.array(["Nd4","0-0","Nxe4","e8 ","e4g2"])

def findall(i,pattern=r'[a-z1-9] '):
    return re.findall(pattern,i)[0] if re.findall(pattern,i) else ""

newList = [findall(i) for i in lists]
# OR if you want to return an array 
newList = np.array(list(map(findall,lists)))

# >>> ['d4', '', 'xe4', 'e8', 'e4g2']
  

Комментарии:

1. Мы почти на месте! Спасибо за идею создания функции, которая затем выполняет цикл по массиву. Я чувствую, что мне просто нужно немного изменить его, чтобы получить то, что мне нужно. Единственное, что не работает с текущим выводом, это то, что он содержит дополнительные, нежелательные буквы / цифры. Например, последний вывод в массиве в примере должен быть просто «g2», в отличие от «e4g2».

Ответ №2:

Возможно, это не самый красивый способ, но я думаю, что он выполняет свою работу!

 import re
import numpy as np

lists = np.array(["Nd4","0-0","Nxe4","e8 ","e4g2"])

def function(i):
    try:
        return re.findall(r'[a-z]d',i)[len(re.findall(r'[a-z]d',i))-1]
    except:
        return ""

newList = [function(i) for i in lists]