Hướng dẫn detect ranges in list python - phát hiện các phạm vi trong python danh sách

Một cách khác để làm điều này. Mặc dù phương pháp này sẽ không hiệu quả như phương pháp khác, nhưng vì nó là một bài tập, nó sẽ dễ theo dõi hơn.

Tôi đã sử dụng chức năng

>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]
5 trong Python để thực hiện một số thứ tôi giải thích dưới đây, bạn có thể kiểm tra nó ở đây để biết thêm về nó.
>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]
5
function in python to do some stuff I explained below, you can check it here to know more about it.

1. Đầu tiên sắp xếp dữ liệu danh sách, để bạn nhận được:

>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]
6
>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]
6

2. Sau đó tìm sự khác biệt của việc tăng giá trị trong danh sách. Giống như ________ 17, ________ 18, .. Nếu sự khác biệt là

>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]
9, thì nó sẽ là một phần của phạm vi:
>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]
7,
>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]
8, .. If the difference is
>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]
9, then it will be part of a range:

.

>>> diff = [j-i for i, j in zip(lst[:-1], lst[1:])]
>>> diff.insert(0, 0)
>>> diff
[0, 2, 1, 1, 1, 1, 2, 2, 1]

3. Bây giờ nhận được các vị trí trong danh sách trên trong đó sự khác biệt là

>>> groups = [lst[i:j] for i,j in zip(ind, ind[1:]+[None])]
>>> groups
[[2], [4, 5, 6, 7, 8], [10], [12, 13]]
1. Điều này là để phát hiện các phạm vi:
>>> groups = [lst[i:j] for i,j in zip(ind, ind[1:]+[None])]
>>> groups
[[2], [4, 5, 6, 7, 8], [10], [12, 13]]
1. This is to detect the ranges:

.

>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]

Vì vậy, các phạm vi là

>>> groups = [lst[i:j] for i,j in zip(ind, ind[1:]+[None])]
>>> groups
[[2], [4, 5, 6, 7, 8], [10], [12, 13]]
3,
>>> groups = [lst[i:j] for i,j in zip(ind, ind[1:]+[None])]
>>> groups
[[2], [4, 5, 6, 7, 8], [10], [12, 13]]
4 và
>>> groups = [lst[i:j] for i,j in zip(ind, ind[1:]+[None])]
>>> groups
[[2], [4, 5, 6, 7, 8], [10], [12, 13]]
5 trong danh sách ban đầu của bạn.

4. Nhóm các yếu tố với nhau sẽ hình thành phạm vi, sử dụng danh sách

>>> groups = [lst[i:j] for i,j in zip(ind, ind[1:]+[None])]
>>> groups
[[2], [4, 5, 6, 7, 8], [10], [12, 13]]
6 thu được:
>>> groups = [lst[i:j] for i,j in zip(ind, ind[1:]+[None])]
>>> groups
[[2], [4, 5, 6, 7, 8], [10], [12, 13]]
6 list obtained:

>>> groups = [lst[i:j] for i,j in zip(ind, ind[1:]+[None])]
>>> groups
[[2], [4, 5, 6, 7, 8], [10], [12, 13]]

5. Cuối cùng thì có được phạm vi mong muốn của bạn:

>>> ranges = [(i[0],i[-1]+1) if len(i)>1 else i[0] for i in groups]
>>> ranges
[2, (4, 9), 10, (12, 14)]

Đặt tất cả vào một chức năng

>>> groups = [lst[i:j] for i,j in zip(ind, ind[1:]+[None])]
>>> groups
[[2], [4, 5, 6, 7, 8], [10], [12, 13]]
7:
>>> groups = [lst[i:j] for i,j in zip(ind, ind[1:]+[None])]
>>> groups
[[2], [4, 5, 6, 7, 8], [10], [12, 13]]
7:

def detect_ranges(lst):
    lst = sorted(lst)
    diff = [j-i for i, j in zip(lst[:-1], lst[1:])]
    diff.insert(0, 0)
    
    ind = [i for i,v in enumerate(diff) if v >= 2]
    ind.insert(0, 0)
    
    groups = [lst[i:j] for i,j in zip(ind, ind[1:]+[None])]
    ranges = [(i[0],i[-1]+1) if len(i)>1 else i[0] for i in groups]
    return ranges

Examples:

>>> lst = [2,6,1,9,3,7,12,45,46,13,90,14,92]
>>> detect_ranges(lst)
[(1, 4), (6, 8), 9, (12, 15), (45, 47), 90, 92]

>>> lst = [12,43,43,11,4,3,6,6,9,9,10,78,32,23,22,98]
>>> detect_ranges(lst)
[(3, 5), (6, 7), (9, 13), (22, 24), 32, (43, 44), 78, 98]

Câu hỏi: Phát hiện phạm vi số nguyên trong danh sách trong PythonDetect ranges of integers in a list in python

2022-10-08T13: 58: 29+00: 00 2022-10-08T13: 58: 29+00: 00

696

Tôi đang cố gắng viết một hàm AnyCodings_Python-3.x "Detect_range" phát hiện các phạm vi của các số nguyên AnyCodings_Python-3.x từ danh sách Hãy nói:anycodings_python-3.x "detect_range" which detects ranges of anycodings_python-3.x integers from a list let's say:


a = [2, 4, 5, 6, 7, 8, 10, 12, 13]

import itertools
def detect_range(L):
    for i, j in itertools.groupby(enumerate(L), lambda x: x[1] - x[0]): 
        j = list(j) 
        yield j[0][1], j[-1][1] 
print(list(detect_range(a))) 

Nó in:


[(2, 2), (4, 8), (10, 10), (12, 13)]

Tuy nhiên, tôi không muốn số nguyên duy nhất anycodings_python-3.x như 2 và 10 được in trong một cặp, nhưng anycodings_python-3.x đơn. Vì vậy, đầu ra mà tôi đang tìm kiếm anycodings_python-3.x từ mã này là:anycodings_python-3.x like 2 and 10 to be printed in a pair, but anycodings_python-3.x single. So the output which I am looking anycodings_python-3.x from this code is:


[2, (4, 9), 10, (12, 14)]

Tổng số câu trả lời 33

30

Câu trả lời 1: của phạm vi phát hiện số nguyên trong danh sách trong Python of Detect ranges of integers in a list in python

Nếu bạn khăng khăng sử dụng iterTools, bạn sẽ không phải là bất kỳ phương pháp nào vào anycodings_python-3.x khác biệt giữa các trường hợp anycodings_python-3.x khác nhau.anycodings_python-3.x should add an if-statement to anycodings_python-3.x differenciate between the different anycodings_python-3.x cases.

Để làm cho mã dễ đọc hơn, tôi đã thêm AnyCodings_Python-3.x các biến thời gian bắt đầu và độ dài.anycodings_python-3.x the temporal variables start and length.

>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]
0

[2, (4, 9), 10, (12, 14)]


Mặt khác, bạn có thể loại bỏ itertools và anycodings_python-3.x chỉ cần thực hiện thuật toán của riêng bạn:anycodings_python-3.x simply implement your own algorithm:

>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]
1

[2, (4, 9), 10, (12, 14)]

0

Mặt khác, bạn có thể loại bỏ itertools và anycodings_python-3.x chỉ cần thực hiện thuật toán của riêng bạn:

2022-10-08T13: 58: 29+00: 00 2022-10-08T13: 58: 29+00: 00answer Link

4

Mrahman of Detect ranges of integers in a list in python

Câu trả lời 2: của phạm vi phát hiện số nguyên trong danh sách trong Python

>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]
2

0

Mặt khác, bạn có thể loại bỏ itertools và anycodings_python-3.x chỉ cần thực hiện thuật toán của riêng bạn:

2022-10-08T13: 58: 29+00: 00 2022-10-08T13: 58: 29+00: 00answer Link

6

Mrahman of Detect ranges of integers in a list in python

Câu trả lời 2: của phạm vi phát hiện số nguyên trong danh sách trong Pythonanycodings_python-3.x have a condition -

>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]
3

Output:

>>> ind = [i for i,v in enumerate(diff) if v >= 2]
>>> ind.insert(0, 0)
>>> ind
[0, 1, 6, 7]
4

Thay đổi nó thànhanycodings_python-3.x from the given output (apart from single anycodings_python-3.x 2 and 10). So, this code assumes that it anycodings_python-3.x was a typo

0

Mặt khác, bạn có thể loại bỏ itertools và anycodings_python-3.x chỉ cần thực hiện thuật toán của riêng bạn:

2022-10-08T13: 58: 29+00: 00 2022-10-08T13: 58: 29+00: 00answer Link

Làm thế nào để bạn tìm thấy phạm vi của một danh sách trong Python?

Sử dụng Range () sẽ nhận được danh sách các số chẵn trong phạm vi được đưa ra làm đầu vào. Các tham số cho phạm vi () là, bắt đầu là 2, dừng là 20 và bước là 2, do đó các giá trị sẽ được tăng thêm 2 và sẽ cung cấp số chẵn cho đến khi Stop-2. will get the list of even numbers in the range given as input. The parameters for range() are, start is 2, stop is 20, and step is 2, so the values will be incremented by 2 and will give even numbers till stop-2.

Làm thế nào để bạn tìm thấy phạm vi của một danh sách?

Phạm vi là sự khác biệt giữa các số nhỏ nhất và cao nhất trong danh sách hoặc tập hợp. Để tìm phạm vi, trước tiên hãy đặt tất cả các số theo thứ tự. Sau đó trừ (lấy đi) số thấp nhất từ ​​cao nhất. Câu trả lời cung cấp cho bạn phạm vi của danh sách.first put all the numbers in order. Then subtract (take away) the lowest number from the highest. The answer gives you the range of the list.

Là phạm vi () một danh sách?

Sử dụng phạm vi () và xrange () trong python 2, range () trả về đối tượng danh sách, tức là, nó tạo ra tất cả các số cùng một lúc.Phạm vi (1, 500) sẽ tạo ra một danh sách python gồm 499 số nguyên trong bộ nhớ.range() returns the list object, i.e., It does generate all numbers at once. The range(1, 500) will generate a Python list of 499 integers in memory.

Python có kiểm tra phạm vi không?

Python Range () để kiểm tra số nguyên ở giữa hai số, chúng ta cũng có thể sử dụng hàm phạm vi Python thực hiện công việc này cho chúng ta.Nó có thể dễ dàng xác định xem số nguyên có nằm giữa hai số hay không.Ở đây, chúng tôi đã gọi hàm phạm vi () bao gồm phạm vi thấp hơn (x) nhưng loại bỏ giá trị cạnh, tức là, Y.We can also use Python range function that does this job for us. It can quite easily identify if the integer lies between two numbers or not. Here, we've called the range() function which includes the lower range (X) but discards the edge value, i.e., Y.