So sánh nhiều danh sách Python

Ứng dụng có thể sử dụng tập dữ liệu dạng bảng hoặc danh sách dữ liệu riêng lẻ làm đầu vào. Trong trường hợp đầu tiên, hãy nhấp vào câu "Nhấp vào đây để nhập dữ liệu dạng bảng" và cung cấp dữ liệu dưới dạng tệp csv/tsv hoặc bằng cách dán chúng vào vùng văn bản chuyên dụng. Trong trường hợp sau, số lượng biểu mẫu danh sách trống cần thiết phải được chuẩn bị trước. Điều này có thể được thực hiện bằng cách điền số lượng danh sách cần chuẩn bị vào trường "Số lượng danh sách", sau đó nhấp vào nút "Đặt" (tất cả các danh sách hiện có sẽ bị loại bỏ). Để thêm biểu mẫu danh sách vào tập hợp biểu mẫu hiện có, hãy nhấp vào nút dấu cộng lớn nằm ngay sau biểu mẫu danh sách cuối cùng

Để áp dụng bất kỳ thay đổi nào được thực hiện trong cài đặt hoặc trong dữ liệu đầu vào, hãy nhấp vào nút "So sánh"

Bạn đã bao giờ đối mặt với tình huống có nhiều danh sách muốn so sánh và cần một chức năng đọc chúng và cho bạn thấy điểm khác biệt giữa tất cả các danh sách đó chưa?

Trong trường hợp này, điều này có thể hữu ích khi bạn có tập dữ liệu lớn và cần một cách nhanh chóng để tìm ra những điểm khác biệt đó và khắc phục chúng khi thích hợp

So sánh hai danh sách

Hãy nhìn và xem những gì đang xảy ra dưới đây

Trước hết, chúng tôi đã xác định hai danh sách. Sự khác biệt duy nhất giữa hai loại này là một loại có giá trị là sáu, loại kia thì không

Tiếp theo, chúng ta có chức năng "so sánh". Điều này đang làm là lấy hai danh sách làm tham số (a,b), sau đó xử lý chúng

Các danh sách được truyền dưới dạng đối số cho các tham số trong dòng này ===> comparelists(list1,list2)

Các tham số a được gán cho list1 và b được gán cho list2

Bit chính của chức năng là hiểu danh sách và nó đang thực hiện như sau

  1. x cho x về cơ bản là tạo một biến x và bắt đầu một vòng lặp đi qua tất cả các giá trị của b
  2. Mỗi lần lặp lại của x được lưu trữ và so sánh với một
  3. “If x not in a” hoàn thành so sánh và nếu true trả về giá trị, nếu không thì chuyển sang giá trị tiếp theo

Theo logic này, có thể thấy rằng sáu là giá trị duy nhất được trả về và đây là điều chúng tôi đang mong đợi dựa trên kiểm tra trực quan

#Reading in two lists
list1 = [1,2,3,4,5] # parameter a below
list2 = [1,2,3,4,5,6] # parameter b below

def comparelists(a,b):
    z = [x for x in b if x not in a] #list comprehension
    print(z)

comparelists(list1,list2)

Output:

[6]

So sánh nhiều hơn hai danh sách

Trong logic trên, chúng ta thấy rằng hai danh sách có thể được so sánh. Nhưng nếu bạn muốn so sánh một danh sách với hai danh sách khác thì sao?

Điều đó được thực hiện dễ dàng, với một số điều chỉnh mã

Như trước khi ba danh sách được xác định, được tạo làm đối số trong danh sách so sánh (list1, list2, list3), sau đó được chuyển đến các tham số hàm a, b, c

Sự khác biệt duy nhất trong logic này là cách hiểu danh sách được viết hơi khác một chút như sau

Chào mừng độc giả trở lại, tôi đã nhớ bạn. Tôi đang bận nâng cấp dự án lớn. LARG*ncm ổn định và hoạt động tốt qua HTTPS. Cơ sở dữ liệu đã được cắt bớt hiện tại của nguồn cấp dữ liệu LARG*chứa khoảng 500.000 kẻ tấn công với thời hạn 30 ngày, tương đương với 200.000 IP có độ tin cậy cao, hay còn gọi là mỗi kẻ tấn công trực tiếp vào chúng tôi, vào honeypot, nhật ký tường lửa hoặc DDOS

Tôi đã cân nhắc thêm dữ liệu từ các nguồn cấp dữ liệu về mối đe dọa khác nhưng chúng tôi hiện không chấp nhận bất kỳ dữ liệu nào trực tiếp từ một nguồn cấp dữ liệu về mối đe dọa. Một số nguồn cấp dữ liệu chứa đầy các địa chỉ sẽ không bao giờ vượt qua danh sách trắng của chúng tôi, chưa nói đến độ tin cậy cao. Làm thế nào để bạn thậm chí biết nguồn cấp dữ liệu nào là tuyệt vời và nguồn nào không?

Phân tích các nguồn cấp dữ liệu đe dọa này là một kỹ năng có giá trị vì bạn có thể xem cách thức hoạt động của các nguồn cấp dữ liệu đặc biệt và sử dụng dữ liệu đó để cải thiện chính mình. Vì vậy, làm thế nào để bạn tìm ra nó? . Nếu nhiều nguồn cấp dữ liệu đe dọa cho biết một IP không hợp lệ, thì bạn càng tin chắc rằng IP đó không hợp lệ, vì vậy bạn muốn kiểm tra càng nhiều nguồn cấp dữ liệu càng tốt. Chỉ cần đừng nản lòng vì sự chồng chéo là rất hiếm theo thống kê với kích thước của internet

Sử dụng python để so sánh 2 danh sách thật dễ dàng

mối đe dọafeed1 = ["1. 1. 1. 1", "3. 3. 3. 3"]

mối đe dọafeed2 = ["2. 2. 2. 2", "3. 3. 3. 3"]

thiết lập (đe dọa1). ngã tư(threatfeed2)

Kết quả, {'3. 3. 3. 3'}, chính xác là những gì bạn mong đợi. Công cụ so sánh này được tích hợp ngay trong python nên đây là một giải pháp đơn giản và nhanh chóng. Đây là giải pháp nếu bạn chỉ có 2 danh sách nhưng mục tiêu của tôi là N nhiều hơn

mối đe dọafeed1 = ["1. 1. 1. 1", "3. 3. 3. 3"]

mối đe dọafeed2 = ["2. 2. 2. 2", "3. 3. 3. 3"]

mối đe dọafeed3 = ["4. 4. 4. 4", "5. 5. 5. 5"]

thiết lập (đe dọa1). giao lộ (threatfeed2, đe dọafeed3)

Thật không may, câu trả lời tôi nhận được trống khi tôi thêm danh sách thứ ba này. Tôi vẫn muốn 3. 3. 3. 3 có trong câu trả lời nhưng chức năng so sánh tìm kiếm cùng một địa chỉ trong tất cả các nguồn cấp dữ liệu. Tôi chắc chắn có thể thấy giá trị trong séc đó nhưng nó không phù hợp với mục đích cụ thể của tôi trong trường hợp này và theo như tôi có thể nói, không có gì được tích hợp sẵn trong python nên đã đến lúc phải ứng biến

mối đe dọafeed1 = ["1. 1. 1. 1", "3. 3. 3. 3"]

mối đe dọafeed2 = ["2. 2. 2. 2", "3. 3. 3. 3"]

mối đe dọafeed3 = ["4. 4. 4. 4", "5. 5. 5. 5"]

danh sách đe dọa = [threatfeed1, đe dọa nguồn cấp dữ liệu 2, đe dọa nguồn cấp dữ liệu 3]

danh sách hiện tại = []

danh sách hiện tại = 1

danh sách đe dọa = [] # để lưu trữ bất kỳ giao lộ nào được phát hiện

counter = 2 # bắt đầu từ 2 vì nó sẽ tải lên 2 danh sách để bắt đầu

để lắng nghe trong danh sách đe dọa. # tải lên các danh sách để so sánh ngay lần chạy đầu tiên

nếu danh sách hiện tại == 1

danh sách hiện tại = nghe

danh sách hiện tại + = 1

khác

danh sách hiện tại = nghe

# Lần chạy đầu tiên, tải danh sách đầu tiên, nếu không tải danh sách tiếp theo

trong khi bộ đếm <= len(threatfeedlists)

cho giao nhaubadguy trong bộ (danh sách hiện tại). giao lộ (danh sách mối đe dọa [bộ đếm - 1])

danh sách đe dọa. nối thêm (giao nhau với badguy)

bộ đếm += 1

danh sách hiện tại + = 1

bộ đếm = danh sách hiện tại

cho kẻ xấu trong danh sách đe dọa

in (badguy)

Mã này khá đơn giản. nó tải lên list1 và 2 và so sánh trong lần chạy đầu tiên, sau đó chuyển sang so sánh list1 và list3. Chỉ mục tăng lên khi danh sách 1 đã được kiểm tra so với tất cả các danh sách khác để nó chuyển sang so sánh danh sách 2 và danh sách 3. Cũng không cần phải quay lại danh sách 3 vì nó đã được kiểm tra so với tất cả các danh sách khác. Danh sách các nguồn cấp dữ liệu có thể dài bao nhiêu tùy ý và bạn sẽ nhận được bất kỳ sự trùng lặp nào tồn tại

Bước phân tích đầu tiên này cho chúng tôi biết rằng khoảng 5.000 trong số >100.000 mục có thể nằm trong hơn 1 danh sách. Khi bạn xử lý tất cả các danh sách nguồn cấp dữ liệu đe dọa khác nhau, bạn nên so sánh danh sách trùng lặp với danh sách trắng của mình. Tôi thường thấy tỷ lệ trùng lặp cao trong danh sách cho phép, có thể là do những kẻ tấn công đang giả mạo IP để chèn dữ liệu xấu vào nguồn cấp dữ liệu

Tôi đã học được rằng những kẻ tấn công được bản địa hóa và các mối đe dọa không thể khám phá mọi thứ. Có sự chồng chéo do kích thước tuyệt đối của internet, vì vậy mặc dù mỗi danh sách có thể có dữ liệu tuyệt vời, nhưng chúng tôi cần điều tra thêm. Một cách tuyệt vời là sử dụng cơ sở dữ liệu Lạm dụngIP. Chúng tôi có xếp hạng tuyệt vời khi báo cáo các cuộc tấn công chống lại LARG*net và có thể tận dụng API của họ để chấm điểm những kẻ tấn công. Thông tin thêm về điều này trong một blog sắp tới

Hai danh sách được so sánh như thế nào trong Python?

toán tử sắp xếp() và == . Danh sách. Phương thức sort() sắp xếp hai danh sách và toán tử == so sánh hai danh sách theo từng mục, nghĩa là chúng có các mục dữ liệu bằng nhau ở các vị trí bằng nhau. Điều này kiểm tra xem danh sách có chứa các giá trị mục dữ liệu bằng nhau hay không nhưng nó không tính đến thứ tự của các phần tử trong danh sách.

Làm cách nào để so sánh hai danh sách chuỗi trong Python và trả về kết quả không khớp?

So sánh các chuỗi bằng cách sử dụng == và. = . == và. = là các toán tử boolean, nghĩa là chúng trả về Đúng hoặc Sai. Ví dụ: == trả về True nếu hai chuỗi khớp nhau và Sai nếu không.