Python: tìm các số liên tiếp trong danh sách

Hàm liệt kê nhận một đối tượng có thể lặp lại và trả về một đối tượng liệt kê chứa các bộ trong đó phần tử đầu tiên là chỉ mục và phần tử thứ hai - mục

Mục đầu tiên trong mỗi bộ là chỉ mục và mục thứ hai là mục danh sách tại chỉ mục đã cho

Chúng tôi đã sử dụng cách hiểu danh sách để lặp lại đối tượng liệt kê

Khả năng hiểu danh sách được sử dụng để thực hiện một số thao tác cho mọi phần tử hoặc chọn một tập hợp con các phần tử đáp ứng một điều kiện

Trên mỗi lần lặp, chúng tôi trừ mục hiện tại khỏi mục trước đó trong danh sách và trả về kết quả

Một điều quan trọng cần lưu ý là - chúng tôi đã sử dụng danh sách cắt lớp [1:] để loại bỏ mục đầu tiên khỏi kết quả

Điều này là cần thiết vì chúng tôi không muốn trừ mục danh sách ở chỉ mục -1 khỏi mục danh sách ở chỉ mục 0

Cú pháp để cắt danh sách là my_list[start:stop:step] trong đó bao gồm giá trị start và giá trị

listA has consecutive numbers
ListB has no consecutive numbers
0 là loại trừ

Nếu giá trị

listA has consecutive numbers
ListB has no consecutive numbers
0 bị bỏ qua, lát sẽ đi đến cuối danh sách

Ngoài ra, bạn có thể kiểm tra xem giá trị của

listA has consecutive numbers
ListB has no consecutive numbers
2 có lớn hơn 0 không

Nếu chỉ mục lớn hơn 0, chúng tôi biết rằng chúng tôi không ở trong lần lặp đầu tiên và có thể trừ mục 0 khỏi mục [1:]2 một cách an toàn, v.v.

Bạn chọn cách tiếp cận nào là vấn đề sở thích cá nhân. Tôi muốn cắt danh sách vì tôi thấy nó trực quan hơn là kiểm tra một điều kiện mà chúng tôi chỉ quan tâm trong lần lặp đầu tiên

Công cụ sau đây trực quan hóa những gì máy tính đang làm từng bước khi nó thực thi chương trình nói trên


Trình chỉnh sửa mã Python

Có một cách khác để giải quyết giải pháp này?

Trước. Viết chương trình Python để trích xuất số lượng phần tử được chỉ định từ một danh sách nhất định, nối tiếp nhau liên tục.
Tiếp theo. Viết chương trình Python để tính trung bình cộng của hai danh sách đã cho.

Mức độ khó của bài tập này là gì?

Dễ dàng trung bình khó

Kiểm tra kỹ năng Lập trình của bạn với bài kiểm tra của w3resource



con trăn. Lời khuyên trong ngày

Từ điển đặt hàng

Cấu trúc dữ liệu từ điển mặc định của Python không có bất kỳ thứ tự chỉ mục nào. Bạn có thể coi các cặp khóa-giá trị là các mặt hàng hỗn hợp trong một túi. Điều này làm cho từ điển rất hiệu quả để làm việc với. Tuy nhiên, đôi khi bạn chỉ cần đặt từ điển của mình

Tùy thuộc vào nhu cầu phân tích dữ liệu của chúng tôi, chúng tôi có thể cần kiểm tra sự hiện diện của các số thứ tự trong bộ chứa dữ liệu python. Trong chương trình dưới đây, ta tìm xem trong các phần tử của Alist có tồn tại các số liên tiếp không

Với phạm vi và được sắp xếp

Hàm sorted sẽ sắp xếp lại các phần tử của danh sách theo thứ tự đã sắp xếp. Sau đó, chúng tôi áp dụng hàm phạm vi lấy các số thấp nhất và cao nhất tạo thành danh sách bằng các hàm tối thiểu và tối đa. Chúng tôi lưu trữ kết quả của các hoạt động trên trong hai danh sách và so sánh chúng cho bằng nhau

Ví dụ

Bản thử trực tiếp

listA = [23,20,22,21,24]
sorted_list = sorted(listA)
#sorted(l) ==
range_list=list(range(min(listA), max(listA)+1))
if sorted_list == range_list:
   print("listA has consecutive numbers")
else:
   print("listA has no consecutive numbers")

# Checking again
listB = [23,20,13,21,24]
sorted_list = sorted(listB)
#sorted(l) ==
range_list=list(range(min(listB), max(listB)+1))
if sorted_list == range_list:
   print("ListB has consecutive numbers")
else:
   print("ListB has no consecutive numbers")

đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

listA has consecutive numbers
ListB has no consecutive numbers

Với numpy diff và sắp xếp

Hàm diff trong numpy có thể tìm thấy sự khác biệt giữa mỗi số sau khi chúng được sắp xếp. Chúng tôi lấy tổng của sự khác biệt này. Điều đó sẽ khớp với độ dài của danh sách nếu tất cả các số liên tiếp

Giả sử chúng ta có một dãy số được gọi là nums. Chúng ta phải kiểm tra xem nó có chứa các giá trị liền kề hay không

Vì vậy, nếu đầu vào giống như nums = [6, 8, 3, 5, 4, 7], thì đầu ra sẽ đúng vì các phần tử là 3, 4, 5, 6, 7, 8

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • nếu kích thước của nums < 1, thì
  • min_val. = số tối thiểu, max_val. = số tối đa
  • nếu (max_val - min_val + 1) bằng kích thước của nums thì
    • đối với tôi trong phạm vi 0 đến kích thước của nums, hãy làm
      • nếu nums[i] < 0 thì
      • nếu không thì,
      • nếu nums[j] > 0 thì
      • nếu không thì,
    • trả về Đúng
  • trả về Sai

Chúng ta hãy xem triển khai sau đây để hiểu rõ hơn -

Ví dụ

Bản thử trực tiếp

def solve(nums):
   if len(nums) < 1:
      return False
   min_val = min(nums)
   max_val = max(nums)
   if max_val - min_val + 1 == len(nums):
      for i in range(len(nums)):
         if nums[i] < 0:
            j = -nums[i] - min_val
         else:
            j = nums[i] - min_val
            if nums[j] > 0:
               nums[j] = -nums[j]
            else:
               return False
      return True
   return False
nums = [6, 8, 3, 5, 4, 7]
print(solve(nums))

Đầu vào

[6, 8, 3, 5, 4, 7]

đầu ra

True

Python: tìm các số liên tiếp trong danh sách


Python: tìm các số liên tiếp trong danh sách