logo

파이썬 | 문자열에서 숫자 추출

문자열을 작업하는 동안 우리는 모든 숫자 항목을 가져와야 하는 이 문제를 여러 번 접하게 됩니다. 이러한 유형의 문제는 일반적으로 경쟁 프로그래밍 및 웹 개발에서도 발생합니다. 이 문제를 해결할 수 있는 특정 방법을 논의해 보겠습니다. 파이썬 .

  Input:   'There are 2 apples for 4 persons'   Output:   [2, 4]   Explanation:   2 and 4 are the only number present in the input string.>

Python의 문자열에서 숫자 추출

이 기사에서 다룰 방법은 다음과 같습니다.



  • 사용 목록 이해 그리고 숫자() 방법
  • 사용 re.findall() 방법
  • 사용 숫자() 방법
  • 사용 필터() 기능
  • 루프를 사용하고 숫자() 방법
  • 사용 str.translate() ~와 함께 str.maketrans()
  • 사용 멍청하다 기준 치수

목록 이해를 사용하여 문자열에서 숫자 추출 그리고 isdigit() 방법

이 문제는 분할 함수를 사용하여 문자열을 목록으로 변환한 다음 목록 이해 이는 목록을 반복하는 데 도움이 되며 숫자 함수는 문자열에서 숫자를 추출하는 데 도움이 됩니다.

파이썬3




test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # using List comprehension + isdigit() +split()> # getting numbers from string> res>=> [>int>(i)>for> i>in> test_string.split()>if> i.isdigit()]> # print result> print>(>'The numbers list is :'> +> str>(res))>

>

>

산출

The original string : There are 2 apples for 4 persons The numbers list is :[2, 4]>

시간 복잡도: O(n), 여기서 n은 입력 문자열의 요소 수입니다.
보조 공간: O(n), 여기서 n은 입력 문자열의 숫자 수입니다.

re.findall()을 사용하여 문자열에서 숫자 추출 방법

이 특정 문제는 Python을 사용하여 해결할 수도 있습니다. 정규식, 우리는 찾기 기능 일치하는 정규식 문자열을 사용하여 숫자 발생을 확인합니다.

파이썬3




import> re> # initializing string> test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # getting numbers from string> temp>=> re.findall(r>'d+'>, test_string)> res>=> list>(>map>(>int>, temp))> # print result> print>(>'The numbers list is : '> +> str>(res))>

>

>

산출

The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>

isnumeric() 메소드를 사용하여 문자열에서 Interger 추출

파이썬에서는 숫자가 아닌 특정 요소가 숫자인지 아닌지를 사용자에게 알려주는 함수이므로 이 방법을 사용하면 문자열에서 숫자를 추출할 수도 있습니다.

파이썬3




test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # getting numbers from string> res>=> []> x>=>test_string.split()> for> i>in> x:> >if> i.isnumeric():> >res.append(>int>(i))> # print result> print>(>'The numbers list is : '> +> str>(res))>

>

>

산출

The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>

시간복잡도 : O(N)
보조공간 : O(N)

Filter() 함수를 사용하여 문자열에서 숫자 추출

먼저 입력 문자열을 정의한 다음 원래 문자열을 인쇄하고 다음을 사용하여 입력 문자열을 단어 목록으로 분할합니다. 나뉘다() 방법. 사용 필터() 함수를 적용하여 목록에서 숫자가 아닌 요소를 필터링하는 기능 람다 함수 엑스 .isdigit() 각 요소에 목록 이해를 사용하여 필터링된 목록의 나머지 요소를 정수로 변환합니다.

결과 정수 목록을 인쇄합니다.

파이썬3




test_string>=> 'There are 2 apples for 4 persons'> print>(>'The original string : '> +> test_string)> # use the split() method to split> # use the filter() function to filter out non-numeric elements from the list> res>=> list>(>filter>(>lambda> x: x.isdigit(), test_string.split()))> # use a list comprehension to convert the remaining elements to integers> res>=> [>int>(s)>for> s>in> res]> # print the resulting list of integers> print>(>'The numbers list is : '> +> str>(res))>

>

>

산출

The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>

시간 복잡도: O(n), 여기서 n은 입력 문자열의 길이입니다. Split() 메서드는 입력 문자열을 단어 목록으로 분할하는 데 O(n) 시간이 걸리고, filter() 함수는 목록의 각 요소를 반복하고 람다 함수를 적용하는 데 O(n) 시간이 걸립니다. 목록 이해에는 O(k) 시간이 소요됩니다. 여기서 k는 필터링된 목록에서 숫자인 요소 수이며 이는 일반적으로 n보다 훨씬 작습니다. 따라서 전체 시간복잡도는 O(n)이다.

보조 공간 복잡성: O(n), Split() 메서드는 입력 문자열과 길이가 같은 단어 목록을 생성하고, filter() 함수는 입력 목록과 최대 길이가 같은 필터링된 목록을 생성합니다. 목록 이해는 일반적으로 입력 목록보다 훨씬 작은 새로운 정수 목록을 생성하지만 최악의 경우 공간 복잡도는 여전히 O(n)입니다. 따라서 전체 보조 공간 복잡도는 O(n)입니다.

루프와 isdigit() 메서드를 사용하여 문자열에서 Interger를 추출합니다.

루프를 사용하여 문자열의 각 문자를 반복하고 다음을 사용하여 숫자인지 확인합니다. 숫자() 방법. 숫자인 경우 목록에 추가합니다.

파이썬3




test_string>=> 'There are 2 apples for 4 persons'> numbers>=> []> for> char>in> test_string:> >if> char.isdigit():> >numbers.append(>int>(char))> print>(>'The numbers list is:'>, numbers)>

>

>

산출

The numbers list is: [2, 4]>

시간 복잡도: O(n), 여기서 n은 문자열의 길이입니다.
보조 공간: O(k), 여기서 k는 문자열의 자릿수입니다.

str.maketrans()와 함께 str.translate()를 사용하여 문자열에서 숫자 추출

입력 문자열을 정의한 다음 변환 테이블을 초기화하여 다음을 사용하여 숫자가 아닌 문자를 제거합니다. str.str. 메이크트랜스() . 사용 str.str. 번역하다() 번역 테이블을 사용하여 문자열에서 숫자가 아닌 문자를 제거하고 그 결과를 숫자_문자열 . 사용 str.str. 나뉘다() 분할하기 위해 숫자_문자열 단어 목록에 추가하고 그 결과를 단어라는 새 목록에 저장합니다. 숫자라는 빈 목록을 초기화하여 결과 정수를 저장한 다음 단어 목록의 각 단어를 반복합니다. 다음을 사용하여 단어가 숫자 문자열인지 확인합니다. str.str. 숫자() .단어가 숫자 문자열인 경우 다음을 사용하여 정수로 변환합니다. 정수() 숫자 목록에 추가하세요.

결과 정수 목록을 인쇄합니다.

다음은 위의 접근 방식을 구현한 것입니다.

파이썬3




# Define the input string> test_string>=> 'There are 2 apples for 4 persons'> # Print the original string> print>(>'The original string : '> +> test_string)> # Initialize a translation table to remove non-numeric characters> translation_table>=> str>.maketrans('>', '>', '>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!'>#$%&'()*+,-./:;?@[]^_`~')> # Use str.translate() with the translation table to remove non-numeric characters> numeric_string>=> test_string.translate(translation_table)> # Use str.split() to split the string into a list of word> words>=> numeric_string.split()> numbers>=> [>int>(i)>for> i>in> words]> print>(>'The numbers list is : '> +> str>(numbers))>

>

>

산출

The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>

시간 복잡도: O(n), 여기서 n은 입력 문자열의 길이입니다. str.translate() 메서드와 str.split() 메서드는 O(n) 시간이 걸리고 단어 목록의 각 단어를 반복하는 데는 O(k) 시간이 걸립니다. 여기서 k는 목록에 있는 단어 수입니다. 숫자 문자열.
보조 공간: O(n), 입력 문자열과 길이가 같은 새 문자열과 새 단어 목록을 만들고, 최대 길이가 k인 새 정수 목록을 만듭니다. 여기서 k는 단어의 수입니다. 숫자 문자열인 목록의 단어입니다.

numpy 모듈을 사용하여 문자열에서 숫자 추출

문자열 test_string을 초기화한 다음 분할 메소드를 사용하여 문자열을 단어 목록으로 분할하고 멍청하다 결과 목록에서 x를 배열합니다. np.char 사용 .숫자 x의 어떤 요소가 숫자인지 나타내는 부울 마스크를 만듭니다. 이 부울 마스크를 사용하여 x를 색인화하고 숫자 요소만 추출합니다. 다음을 사용하여 결과 문자열 배열을 정수 배열로 변환합니다. astype.

결과 정수 배열을 인쇄합니다.

파이썬3




import> numpy as np> # initializing string> test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # getting numbers from string using numpy> x>=> np.array(test_string.split())> res>=> x[np.char.isnumeric(x)].astype(>int>)> # print result> print>(>'The numbers list is : '> +> str>(res))> #This code is contributed by Vinay Pinjala.>

>

>

후보 키

산출:

The original string : There are 2 apples for 4 persons The numbers list is : [2 4]>

시간 복잡도: O(n), 여기서 n은 원래 문자열 test_string의 길이입니다. 이는 분할 방법이 문자열을 단어 목록으로 분할하는 데 O(n) 시간이 걸리고, np.char.isnumeric 방법이 부울 마스크를 생성하는 데 O(n) 시간이 걸리기 때문입니다. 나머지 작업에는 일정한 시간이 걸립니다.

보조 공간: O(n), 여기서 n은 원래 문자열 test_string의 길이입니다. 이는 O(n) 공간을 차지하는 문자열의 단어를 저장하기 위해 numpy 배열 x를 생성하기 때문입니다. 결과적으로 생성된 numpy 정수 배열에 사용되는 공간은 문자열의 모든 숫자 요소를 포함하므로 O(n)입니다.