Hướng dẫn find digit in string python - tìm chữ số trong chuỗi python

15

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

def get_digits(str1):
    c = ""

    for i in str1:
        if i.isdigit():
            c += i
            return c

Trên đây là mã mà tôi đã sử dụng và vấn đề là nó chỉ trả về chữ số đầu tiên của chuỗi. Đối với điều này, tôi phải giữ cả hai cho câu lệnh Loop và Return. Có ai biết cách sửa chữa không?

Thanks.

Hướng dẫn find digit in string python - tìm chữ số trong chuỗi python

Hỏi ngày 17 tháng 8 năm 2012 lúc 12:12Aug 17, 2012 at 12:12

2

Như những người khác đã nói, bạn có một vấn đề ngữ nghĩa về thụt lề của mình, nhưng bạn không cần phải viết chức năng đó để làm điều đó, một cách pythonic hơn để làm điều đó là:

def get_digits(text):
    return filter(str.isdigit, text)

Trên thông dịch viên:

>>> filter(str.isdigit, "lol123")
'123'

Vài lời khuyên

Luôn tự kiểm tra mọi thứ khi mọi người hiển thị các phương pháp 'nhanh hơn':

from timeit import Timer

def get_digits1(text):
    c = ""
    for i in text:
        if i.isdigit():
            c += i
    return c

def get_digits2(text):
    return filter(str.isdigit, text)

def get_digits3(text):
    return ''.join(c for c in text if c.isdigit())

if __name__ == '__main__':
    count = 5000000
    t = Timer("get_digits1('abcdef123456789ghijklmnopq123456789')", "from __main__ import get_digits1")
    print t.timeit(number=count)

    t = Timer("get_digits2('abcdef123456789ghijklmnopq123456789')", "from __main__ import get_digits2")
    print t.timeit(number=count)

    t = Timer("get_digits3('abcdef123456789ghijklmnopq123456789')", "from __main__ import get_digits3")
    print t.timeit(number=count)



~# python tit.py
19.990989106  # Your original solution
16.7035926379 # My solution
24.8638381019 # Accepted solution

Đã trả lời ngày 17 tháng 8 năm 2012 lúc 12:19Aug 17, 2012 at 12:19

TarantulatarantulaTarantula

18.3K12 Huy hiệu vàng53 Huy hiệu bạc71 Huy hiệu đồng12 gold badges53 silver badges71 bronze badges

1

Căn cứ của bạn là một chút borked (thụt vào trong Python là khá quan trọng). Tốt hơn:

def get_digits(str1):
    c = ""
    for i in str1:
        if i.isdigit():
            c += i
    return c

Một giải pháp ngắn hơn và nhanh hơn bằng cách sử dụng các biểu thức máy phát:

''.join(c for c in my_string if c.isdigit())

LVC

33.3k9 Huy hiệu vàng69 Huy hiệu bạc96 Huy hiệu Đồng9 gold badges69 silver badges96 bronze badges

Đã trả lời ngày 17 tháng 8 năm 2012 lúc 12:16Aug 17, 2012 at 12:16

Benjamin Wohlwendbenjamin WohlwendBenjamin Wohlwend

30.1k11 Huy hiệu vàng86 Huy hiệu bạc99 Huy hiệu Đồng11 gold badges86 silver badges99 bronze badges

5

Đó là bởi vì câu lệnh

def get_digits(text):
    return filter(str.isdigit, text)
4 của bạn nằm trong vòng lặp For, vì vậy nó trở lại sau điều kiện
def get_digits(text):
    return filter(str.isdigit, text)
5 đầu tiên và dừng.

  def get_digits(str1):
      c = ""
      for i in str1:
        if i.isdigit():
            c += i
      return c

Đã trả lời ngày 17 tháng 8 năm 2012 lúc 12:15Aug 17, 2012 at 12:15

Hướng dẫn find digit in string python - tìm chữ số trong chuỗi python

Ashwini Chaudharyashwini ChaudharyAshwini Chaudhary

237K56 Huy hiệu vàng447 Huy hiệu bạc497 Huy hiệu đồng56 gold badges447 silver badges497 bronze badges

Tất nhiên nó chỉ trả về chữ số đầu tiên, bạn nói rõ ràng rằng Python sẽ quay lại ngay khi bạn có một chữ số.

Thay đổi thụt lề của câu lệnh

def get_digits(text):
    return filter(str.isdigit, text)
4 và nó sẽ hoạt động:

def get_digits(str1):
    c = ""

    for i in str1:
        if i.isdigit():
            c += i

    # Note the indentation here
    return c

Đã trả lời ngày 17 tháng 8 năm 2012 lúc 12:16Aug 17, 2012 at 12:16

Hướng dẫn find digit in string python - tìm chữ số trong chuỗi python

Benjamin Wohlwendbenjamin Wohlwend

def get_digits(str1):
    c = ""

    for i in str1:
        if i.isdigit():
            c += i

    return c

digits = get_digits("abd1m4m3m22mmmbb4")
print(digits)

30.1k11 Huy hiệu vàng86 Huy hiệu bạc99 Huy hiệu Đồng

def get_digits(str1){
    c = ""

    for i in str1 {
        if i.isdigit(){
            c += i
            return c    # Notice the error here
        }
    }
}

Đó là bởi vì câu lệnh

def get_digits(text):
    return filter(str.isdigit, text)
4 của bạn nằm trong vòng lặp For, vì vậy nó trở lại sau điều kiện
def get_digits(text):
    return filter(str.isdigit, text)
5 đầu tiên và dừng.

def get_digits(text):
    return filter(str.isdigit, text)
0

Đã trả lời ngày 17 tháng 8 năm 2012 lúc 12:15Aug 17, 2012 at 12:15

Hướng dẫn find digit in string python - tìm chữ số trong chuỗi python

Ashwini Chaudharyashwini ChaudharyDhruvPathak

237K56 Huy hiệu vàng447 Huy hiệu bạc497 Huy hiệu đồng15 gold badges113 silver badges172 bronze badges

Tất nhiên nó chỉ trả về chữ số đầu tiên, bạn nói rõ ràng rằng Python sẽ quay lại ngay khi bạn có một chữ số.

def get_digits(text):
    return filter(str.isdigit, text)
1

Thay đổi thụt lề của câu lệnh

def get_digits(text):
    return filter(str.isdigit, text)
4 và nó sẽ hoạt động:

def get_digits(text):
    return filter(str.isdigit, text)
2

yields:

def get_digits(text):
    return filter(str.isdigit, text)
3

Explanation:

Có một vấn đề thụt lề trả về khi tìm thấy chữ số đầu tiên, như với thụt dòng hiện tại, nó được coi là một tuyên bố bên trong câu lệnh

def get_digits(text):
    return filter(str.isdigit, text)
5, nó cần phải song song với câu lệnh
def get_digits(text):
    return filter(str.isdigit, text)
8 để được xem xét bên ngoài câu lệnh
def get_digits(text):
    return filter(str.isdigit, text)
8.

Một niềng răng xoăn tương đương với mã không chính xác của bạn là:

Đã trả lời ngày 17 tháng 8 năm 2012 lúc 12:15Aug 17, 2012 at 12:15

Ashwini Chaudharyashwini ChaudharyLevon

237K56 Huy hiệu vàng447 Huy hiệu bạc497 Huy hiệu đồng33 gold badges198 silver badges187 bronze badges

Làm thế nào để bạn tìm thấy một chữ số trong một chuỗi?

Để tìm một chuỗi đã cho có chứa một số, hãy chuyển đổi nó thành một mảng ký tự và tìm xem mỗi ký tự trong mảng có phải là một chữ số bằng phương thức isDigit () của lớp ký tự hay không.convert it to a character array and find whether each character in the array is a digit using the isDigit() method of the Character class.

Isdigit () có phải là một hàm trong Python không?

Giá trị trả về của hàm isDigit () trong Python Hàm này trả về giá trị boolean dựa trên tình huống.isDigit () trả về true nếu tất cả các ký tự chuỗi là chữ số.Nếu không nó trả về sai.Nếu chuỗi trống, điều đó có nghĩa là chuỗi không có chữ số bên trong nó, vì vậy nó cũng sẽ trả về sai.This function returns the boolean value based on the situation. isDigit() returns True if all the string characters are digits. Else it returns False. If the string is empty, it means that string has no digit inside it, so it will also return False.