Hướng dẫn how to find all index of element in string python - cách tìm tất cả chỉ mục của phần tử trong chuỗi python

Tôi có một số mã đơn giản:

def find(str, ch):
    for ltr in str:
        if ltr == ch:
            return str.index(ltr)
find("ooottat", "o")

Hàm chỉ trả về chỉ mục đầu tiên. Nếu tôi thay đổi trở lại để in, nó sẽ in 0 0 0. Tại sao điều này và có cách nào để có được

def find(s, ch):
    return [i for i, ltr in enumerate(s) if ltr == ch]
4 không?

Hướng dẫn how to find all index of element in string python - cách tìm tất cả chỉ mục của phần tử trong chuỗi python

Nghịch lý

74011 Huy hiệu bạc28 Huy hiệu đồng11 silver badges28 bronze badges

Đã hỏi ngày 20 tháng 6 năm 2012 lúc 14:55Jun 20, 2012 at 14:55

3

Điều này là do

def find(s, ch):
    return [i for i, ltr in enumerate(s) if ltr == ch]
5 sẽ trả về chỉ mục trong đó
def find(s, ch):
    return [i for i, ltr in enumerate(s) if ltr == ch]
6 xảy ra lần đầu tiên. Thử:

def find(s, ch):
    return [i for i, ltr in enumerate(s) if ltr == ch]

Điều này sẽ trả về một danh sách tất cả các chỉ mục bạn cần.

P.S. Câu trả lời của Hugh cho thấy một hàm máy phát (nó tạo ra sự khác biệt nếu danh sách các chỉ mục có thể lớn). Hàm này cũng có thể được điều chỉnh bằng cách thay đổi

def find(s, ch):
    return [i for i, ltr in enumerate(s) if ltr == ch]
7 thành
def find(s, ch):
    return [i for i, ltr in enumerate(s) if ltr == ch]
8.

Đã trả lời ngày 20 tháng 6 năm 2012 lúc 14:58Jun 20, 2012 at 14:58

Lev Levitskylev LevitskyLev Levitsky

61.4K20 Huy hiệu vàng142 Huy hiệu bạc170 Huy hiệu đồng20 gold badges142 silver badges170 bronze badges

3

Tôi sẽ đi với LEV, nhưng đáng chỉ ra rằng nếu bạn kết thúc với các tìm kiếm phức tạp hơn sử dụng Re.Finditer có thể đáng nhớ (nhưng lại thường gây ra nhiều rắc rối hơn giá trị - nhưng đôi khi tiện dụng để biết)

test = "ooottat"
[ (i.start(), i.end()) for i in re.finditer('o', test)]
# [(0, 1), (1, 2), (2, 3)]

[ (i.start(), i.end()) for i in re.finditer('o+', test)]
# [(0, 3)]

Đã trả lời ngày 20 tháng 6 năm 2012 lúc 15:19Jun 20, 2012 at 15:19

Hướng dẫn how to find all index of element in string python - cách tìm tất cả chỉ mục của phần tử trong chuỗi python

Jon Clements ♦ Jon ClementsJon Clements

135K32 Huy hiệu vàng241 Huy hiệu bạc274 Huy hiệu đồng32 gold badges241 silver badges274 bronze badges

Câu trả lời của Lev là câu trả lời tôi sử dụng, tuy nhiên đây là một cái gì đó dựa trên mã gốc của bạn:

def find(str, ch):
    for i, ltr in enumerate(str):
        if ltr == ch:
            yield i

>>> list(find("ooottat", "o"))
[0, 1, 2]

Đã trả lời ngày 20 tháng 6 năm 2012 lúc 15:04Jun 20, 2012 at 15:04

Mark Ransommark RansomMark Ransom

292K40 Huy hiệu vàng384 Huy hiệu bạc610 Huy hiệu Đồng40 gold badges384 silver badges610 bronze badges

def find_offsets(haystack, needle):
    """
    Find the start of all (possibly-overlapping) instances of needle in haystack
    """
    offs = -1
    while True:
        offs = haystack.find(needle, offs+1)
        if offs == -1:
            break
        else:
            yield offs

for offs in find_offsets("ooottat", "o"):
    print offs

kết quả trong

0
1
2

Đã trả lời ngày 20 tháng 6 năm 2012 lúc 15:01Jun 20, 2012 at 15:01

Hugh Bothwellhugh BothwellHugh Bothwell

54K7 Huy hiệu vàng82 Huy hiệu bạc98 Huy hiệu đồng7 gold badges82 silver badges98 bronze badges

Nhận tất cả vị trí chỉ trong một dòng

word = 'Hello'
to_find = 'l'

# in one line
print([i for i, x in enumerate(word) if x == to_find])

Đã trả lời ngày 3 tháng 6 năm 2021 lúc 15:05Jun 3, 2021 at 15:05

Hướng dẫn how to find all index of element in string python - cách tìm tất cả chỉ mục của phần tử trong chuỗi python

Darkstar DreamDarkstar DreamDarkstar Dream

1.3011 huy hiệu vàng10 Huy hiệu bạc21 Huy hiệu đồng1 gold badge10 silver badges21 bronze badges

0

def find_idx(str, ch):
    yield [i for i, c in enumerate(str) if c == ch]

for idx in find_idx('babak karchini is a beginner in python ', 'i'):
    print(idx)

output:

[11, 13, 15, 23, 29]

Đã trả lời ngày 19 tháng 9 năm 2020 lúc 15:44Sep 19, 2020 at 15:44

Hướng dẫn how to find all index of element in string python - cách tìm tất cả chỉ mục của phần tử trong chuỗi python

Theo quy tắc của ngón tay cái, các mảng numpy thường vượt trội so với các giải pháp khác trong khi làm việc với POD, dữ liệu cũ đơn giản. Một chuỗi là một ví dụ về pod và một ký tự nữa. Để tìm tất cả các chỉ số của chỉ một char trong một chuỗi, numpy ndarrays có thể là cách nhanh nhất:

def find1(str, ch):
  # 0.100 seconds for 1MB str 
  npbuf = np.frombuffer(str, dtype=np.uint8) # Reinterpret str as a char buffer
  return np.where(npbuf == ord(ch))          # Find indices with numpy

def find2(str, ch):
  # 0.920 seconds for 1MB str 
  return [i for i, c in enumerate(str) if c == ch] # Find indices with python

Đã trả lời ngày 21 tháng 2 năm 2020 lúc 11:22Feb 21, 2020 at 11:22

Anton Kanton kAnton K

4.5622 Huy hiệu vàng47 Huy hiệu bạc59 Huy hiệu Đồng2 gold badges47 silver badges59 bronze badges

def find(s, ch):
    return [i for i, ltr in enumerate(s) if ltr == ch]
0

Azat Ibrakov

9.1159 huy hiệu vàng38 Huy hiệu bạc47 Huy hiệu đồng9 gold badges38 silver badges47 bronze badges

Đã trả lời ngày 23 tháng 8 năm 2018 lúc 9:37Aug 23, 2018 at 9:37

Hướng dẫn how to find all index of element in string python - cách tìm tất cả chỉ mục của phần tử trong chuỗi python

2

Đây là phiên bản sửa đổi một chút của câu trả lời của Mark Ransom hoạt động nếu

def find(s, ch):
    return [i for i, ltr in enumerate(s) if ltr == ch]
6 có thể có chiều dài nhiều hơn một ký tự.

def find(s, ch):
    return [i for i, ltr in enumerate(s) if ltr == ch]
1

Đã trả lời ngày 8 tháng 4 năm 2020 lúc 0:09Apr 8, 2020 at 0:09

Dashesydashesydashesy

2.5403 Huy hiệu vàng45 Huy hiệu bạc60 Huy hiệu Đồng3 gold badges45 silver badges60 bronze badges

Tất cả các câu trả lời khác có hai lỗ hổng chính:

  1. Họ thực hiện một vòng python qua chuỗi, điều này chậm một cách khủng khiếp, hoặc
  2. Họ sử dụng Numpy, đó là một sự phụ thuộc bổ sung khá lớn.
def find(s, ch):
    return [i for i, ltr in enumerate(s) if ltr == ch]
2

Điều này lặp lại thông qua

test = "ooottat"
[ (i.start(), i.end()) for i in re.finditer('o', test)]
# [(0, 1), (1, 2), (2, 3)]

[ (i.start(), i.end()) for i in re.finditer('o+', test)]
# [(0, 3)]
0 Tìm kiếm
test = "ooottat"
[ (i.start(), i.end()) for i in re.finditer('o', test)]
# [(0, 1), (1, 2), (2, 3)]

[ (i.start(), i.end()) for i in re.finditer('o+', test)]
# [(0, 3)]
1, luôn bắt đầu tại nơi lần lặp trước đó kết thúc. Nó sử dụng tích hợp
test = "ooottat"
[ (i.start(), i.end()) for i in re.finditer('o', test)]
# [(0, 1), (1, 2), (2, 3)]

[ (i.start(), i.end()) for i in re.finditer('o+', test)]
# [(0, 3)]
2 nhanh hơn nhiều so với lặp lại thông qua các ký tự ____2020. Nó không yêu cầu bất kỳ nhập khẩu mới nào.

Đã trả lời ngày 9 tháng 9 năm 2020 lúc 18:00Sep 9, 2020 at 18:00

JonathanjonathanJonathan

1.77416 huy hiệu bạc26 Huy hiệu đồng16 silver badges26 bronze badges

2

Để tô điểm cho năm sao một sao được đăng bởi @Lev và @DarkStar:

test = "ooottat"
[ (i.start(), i.end()) for i in re.finditer('o', test)]
# [(0, 1), (1, 2), (2, 3)]

[ (i.start(), i.end()) for i in re.finditer('o+', test)]
# [(0, 3)]
4
test = "ooottat"
[ (i.start(), i.end()) for i in re.finditer('o', test)]
# [(0, 1), (1, 2), (2, 3)]

[ (i.start(), i.end()) for i in re.finditer('o+', test)]
# [(0, 3)]
5
test = "ooottat"
[ (i.start(), i.end()) for i in re.finditer('o', test)]
# [(0, 1), (1, 2), (2, 3)]

[ (i.start(), i.end()) for i in re.finditer('o+', test)]
# [(0, 3)]
6
test = "ooottat"
[ (i.start(), i.end()) for i in re.finditer('o', test)]
# [(0, 1), (1, 2), (2, 3)]

[ (i.start(), i.end()) for i in re.finditer('o+', test)]
# [(0, 3)]
5
test = "ooottat"
[ (i.start(), i.end()) for i in re.finditer('o', test)]
# [(0, 1), (1, 2), (2, 3)]

[ (i.start(), i.end()) for i in re.finditer('o+', test)]
# [(0, 3)]
6

Điều này chỉ làm cho việc phân tách số chỉ mục rõ ràng hơn. Kết quả sẽ là:

test = "ooottat"
[ (i.start(), i.end()) for i in re.finditer('o', test)]
# [(0, 1), (1, 2), (2, 3)]

[ (i.start(), i.end()) for i in re.finditer('o+', test)]
# [(0, 3)]
7
Result will be:
test = "ooottat"
[ (i.start(), i.end()) for i in re.finditer('o', test)]
# [(0, 1), (1, 2), (2, 3)]

[ (i.start(), i.end()) for i in re.finditer('o+', test)]
# [(0, 3)]
7

Đã trả lời ngày 19 tháng 7 năm 2021 lúc 22:15Jul 19, 2021 at 22:15

Hướng dẫn how to find all index of element in string python - cách tìm tất cả chỉ mục của phần tử trong chuỗi python

Bạn có thể thử cái này

def find(s, ch):
    return [i for i, ltr in enumerate(s) if ltr == ch]
3

Hướng dẫn how to find all index of element in string python - cách tìm tất cả chỉ mục của phần tử trong chuỗi python

Aizaz

3.0509 huy hiệu vàng24 Huy hiệu bạc57 Huy hiệu đồng9 gold badges24 silver badges57 bronze badges

Đã trả lời ngày 3 tháng 5 năm 2013 lúc 7:13May 3, 2013 at 7:13

Làm thế nào để bạn tìm thấy chỉ mục của tất cả các phần tử trong một chuỗi python?

Để tìm chỉ mục của một phần tử danh sách trong Python, hãy sử dụng phương thức Index () tích hợp. Để tìm chỉ mục của một ký tự trong một chuỗi, hãy sử dụng phương thức index () trên chuỗi. Đây là câu trả lời nhanh chóng.use the built-in index() method. To find the index of a character in a string, use the index() method on the string. This is the quick answer.

Làm thế nào để bạn tìm thấy tất cả các chỉ mục của một chuỗi con trong một chuỗi?

Finditer () Chức năng Finditer của thư viện Regex có thể giúp chúng tôi thực hiện nhiệm vụ tìm ra các lần xuất hiện của chuỗi con trong chuỗi đích và hàm bắt đầu có thể trả về chỉ số kết quả của từng phần trong số chúng. The finditer function of the regex library can help us perform the task of finding the occurrences of the substring in the target string and the start function can return the resultant index of each of them.

Làm thế nào để bạn tìm thấy chỉ mục của tất cả các lần xuất hiện trong một chuỗi?

Sử dụng phương thức indexof () và lastindexof (), lớp chuỗi cung cấp một phương thức indexOf () trả về chỉ mục của sự xuất hiện đầu tiên của một ký tự trong một chuỗi.Để có được các chỉ số của tất cả các lần xuất hiện của một ký tự trong một chuỗi, bạn có thể liên tục gọi phương thức indexof () trong một vòng lặp. The String class provides an indexOf() method that returns the index of the first appearance of a character in a string. To get the indices of all occurrences of a character in a String, you can repeatedly call the indexOf() method within a loop.

Làm thế nào để bạn kiểm tra các chỉ mục trong Python?

Để tạo điều kiện cho điều này, Python có chức năng sẵn có gọi là index ().Hàm này lấy phần tử làm đối số và trả về chỉ mục.Bằng cách sử dụng chức năng này, chúng tôi có thể tìm thấy chỉ mục của một phần tử trong danh sách trong Python.index(). This function takes in the element as an argument and returns the index. By using this function we are able to find the index of an element in a list in Python.