Hướng dẫn how to check value in python - cách kiểm tra giá trị trong python

Câu hỏi ban đầu là:

Cách nhanh nhất để biết nếu một giá trị tồn tại trong một danh sách (một danh sách có hàng triệu giá trị trong đó) và chỉ số của nó là gì?

Do đó, có hai điều cần tìm:

  1. là một mục trong danh sách, và
  2. Chỉ mục là gì (nếu trong danh sách).

Hướng tới điều này, tôi đã sửa đổi mã @xslittlegrass để tính toán các chỉ mục trong mọi trường hợp và thêm một phương thức bổ sung.

Kết quả

Hướng dẫn how to check value in python - cách kiểm tra giá trị trong python

Phương pháp là:

  1. trong-về cơ bản nếu x in b: return b.index (x)
  2. Hãy thử-hãy thử/bắt trên B.index (x) (bỏ qua phải kiểm tra xem x trong b)
  3. Đặt-về cơ bản nếu x trong set (b): return b.index (x)
  4. Bisect-phân loại B với chỉ số của nó, tìm kiếm nhị phân cho X được sắp xếp (b). Lưu ý mod từ @xslittlegrass, người trả về chỉ mục trong B được sắp xếp, thay vì ban đầu b)
  5. đảo ngược-từ điển tra cứu ngược d cho b; sau đó d [x] cung cấp chỉ số của x.

Kết quả cho thấy phương pháp 5 là nhanh nhất.

Điều thú vị là thử và các phương thức đã đặt tương đương với thời gian.try and the set methods are equivalent in time.


Mã kiểm tra

import random
import bisect
import matplotlib.pyplot as plt
import math
import timeit
import itertools

def wrapper(func, *args, **kwargs):
    " Use to produced 0 argument function for call it"
    # Reference https://www.pythoncentral.io/time-a-python-function/
    def wrapped():
        return func(*args, **kwargs)
    return wrapped

def method_in(a,b,c):
    for i,x in enumerate(a):
        if x in b:
            c[i] = b.index(x)
        else:
            c[i] = -1
    return c

def method_try(a,b,c):
    for i, x in enumerate(a):
        try:
            c[i] = b.index(x)
        except ValueError:
            c[i] = -1

def method_set_in(a,b,c):
    s = set(b)
    for i,x in enumerate(a):
        if x in s:
            c[i] = b.index(x)
        else:
            c[i] = -1
    return c

def method_bisect(a,b,c):
    " Finds indexes using bisection "

    # Create a sorted b with its index
    bsorted = sorted([(x, i) for i, x in enumerate(b)], key = lambda t: t[0])

    for i,x in enumerate(a):
        index = bisect.bisect_left(bsorted,(x, ))
        c[i] = -1
        if index < len(a):
            if x == bsorted[index][0]:
                c[i] = bsorted[index][1]  # index in the b array

    return c

def method_reverse_lookup(a, b, c):
    reverse_lookup = {x:i for i, x in enumerate(b)}
    for i, x in enumerate(a):
        c[i] = reverse_lookup.get(x, -1)
    return c

def profile():
    Nls = [x for x in range(1000,20000,1000)]
    number_iterations = 10
    methods = [method_in, method_try, method_set_in, method_bisect, method_reverse_lookup]
    time_methods = [[] for _ in range(len(methods))]

    for N in Nls:
        a = [x for x in range(0,N)]
        random.shuffle(a)
        b = [x for x in range(0,N)]
        random.shuffle(b)
        c = [0 for x in range(0,N)]

        for i, func in enumerate(methods):
            wrapped = wrapper(func, a, b, c)
            time_methods[i].append(math.log(timeit.timeit(wrapped, number=number_iterations)))

    markers = itertools.cycle(('o', '+', '.', '>', '2'))
    colors = itertools.cycle(('r', 'b', 'g', 'y', 'c'))
    labels = itertools.cycle(('in', 'try', 'set', 'bisect', 'reverse'))

    for i in range(len(time_methods)):
        plt.plot(Nls,time_methods[i],marker = next(markers),color=next(colors),linestyle='-',label=next(labels))

    plt.xlabel('list size', fontsize=18)
    plt.ylabel('log(time)', fontsize=18)
    plt.legend(loc = 'upper left')
    plt.show()

profile()

Trong bài viết này, chúng tôi sẽ thảo luận về các cách khác nhau để kiểm tra xem giá trị có tồn tại trong từ điển hay không. Chúng tôi sẽ bao gồm các cách sau,

  • Kiểm tra xem giá trị có tồn tại trong một dict bằng cách sử dụng câu lệnh không
  • Kiểm tra xem một giá trị có tồn tại trong từ điển Python sử dụng cho vòng lặp không
  • Kiểm tra xem giá trị có tồn tại trong từ điển bằng cách sử dụng bất kỳ () và danh sách hiểu không

Sử dụng danh sách hiểu, lặp qua một chuỗi của tất cả các cặp giá trị khóa trong từ điển và tạo một danh sách bool. Danh sách sẽ chứa một sự thật cho mỗi lần xuất hiện giá trị của chúng tôi trong từ điển. Sau đó gọi bất kỳ () chức năng nào trong danh sách các bools để kiểm tra xem nó có chứa bất kỳ đúng nào không. Nếu có thì điều đó có nghĩa là giá trị của chúng tôi tồn tại trong bất kỳ cặp giá trị khóa nào của từ điển.

# Dictionary of string and int
word_freq = {
    "Hello": 56,
    "at": 23,
    "test": 43,
    "this": 78
}

Ở đây, giá trị 43 tồn tại trong từ điển do đó bất kỳ () đã trả về đúng.

Vì vậy, đây là những cách khác nhau để kiểm tra xem một giá trị có tồn tại trong từ điển hay không.

Giá trị () làm gì trong Python?

Phương thức từ điển python () Phương thức Giá trị () Phương thức trả về đối tượng Chế độ xem. Đối tượng xem chứa các giá trị của từ điển, như một danh sách.

value = 43

# python check if value exist in dict using "in" & values()
if value in word_freq.values():
    print(f"Yes, Value: '{value}' exists in dictionary")
else:
    print(f"No, Value: '{value}' does not exists in dictionary")

Output:

Yes, Value: '43' exists in dictionary

Làm thế nào để bạn kiểm tra xem một giá trị có ở trong một python chính không?

Kiểm tra xem khóa có tồn tại bằng phương thức has_key () bằng phương thức has_key () trả về đúng không nếu một khóa nhất định có sẵn trong từ điển, nếu không, nó sẽ trả về sai. Với phương thức sẵn có has_key (), hãy sử dụng câu lệnh IF để kiểm tra xem khóa có có trong từ điển hay không.

value = 51

# python check if value exist in dict using "in" & values()
if value in word_freq.values():
    print(f"Yes, Value: '{value}' exists in dictionary")
else:
    print(f"No, Value: '{value}' does not exists in dictionary")

Output:

No, Value: '51' does not exists in dictionary

Ở đây, giá trị 51 không tồn tại trong từ điển của chúng tôi do đó nếu câu lệnh được đánh giá là sai.

Những bài viết liên quan:

  • Nhận khóa liên kết với một giá trị trong một từ điển.
  • Python: Kiểm tra xem chính có tồn tại theo từ điển không (6 cách)

Kiểm tra xem một giá trị có tồn tại trong từ điển Python sử dụng cho vòng lặp không

Chúng ta có thể lặp lại tất cả các cặp từ điển giá trị khóa bằng cách sử dụng vòng lặp và trong khi lặp lại, chúng ta có thể kiểm tra xem giá trị của chúng ta có khớp với bất kỳ giá trị nào trong các cặp giá trị khóa không. Chúng tôi đã tạo ra một chức năng riêng cho việc này. Hãy để hiểu điều này với một ví dụ,

def check_value_exist(test_dict, value):
    do_exist = False
    for key, val in test_dict.items():
        if val == value:
            do_exist = True
    return do_exist

value = 43

# Iterate over all key, value pairs in dict and check if value exist
if check_value_exist(word_freq, value):
    print(f"Yes, Value: '{value}' exists in dictionary")
else:
    print(f"No, Value: '{value}' does not exists in dictionary")

Output:

Yes, Value: '43' exists in dictionary

Vì giá trị 43 tồn tại trong từ điển của chúng tôi, do đó Check_value_exist () đã trả về đúng.

Kiểm tra xem giá trị có tồn tại trong từ điển bằng cách sử dụng bất kỳ () và danh sách hiểu không

Sử dụng danh sách hiểu, lặp qua một chuỗi của tất cả các cặp giá trị khóa trong từ điển và tạo một danh sách bool. Danh sách sẽ chứa một sự thật cho mỗi lần xuất hiện giá trị của chúng tôi trong từ điển. Sau đó gọi bất kỳ () chức năng nào trong danh sách các bools để kiểm tra xem nó có chứa bất kỳ đúng nào không. Nếu có thì điều đó có nghĩa là giá trị của chúng tôi tồn tại trong bất kỳ cặp giá trị khóa nào của từ điển.

# Check if key exist in dictionary using any()
if any([True for k,v in word_freq.items() if v == value]):
    print(f"Yes, Value: '{value}' exists in dictionary")
else:
    print(f"No, Value: '{value}' does not exists in dictionary")

Output:

Yes, Value: '43' exists in dictionary

Ở đây, giá trị 43 tồn tại trong từ điển do đó bất kỳ () đã trả về đúng.

Conclusion:

Vì vậy, đây là những cách khác nhau để kiểm tra xem một giá trị có tồn tại trong từ điển hay không.

Giá trị () làm gì trong Python?

Phương thức từ điển python () Phương thức Giá trị () Phương thức trả về đối tượng Chế độ xem. Đối tượng xem chứa các giá trị của từ điển, như một danh sách.returns a view object. The view object contains the values of the dictionary, as a list.

Làm thế nào để bạn kiểm tra xem một giá trị có ở trong một python chính không?

Kiểm tra xem khóa có tồn tại bằng phương thức has_key () bằng phương thức has_key () trả về đúng không nếu một khóa nhất định có sẵn trong từ điển, nếu không, nó sẽ trả về sai.Với phương thức sẵn có has_key (), hãy sử dụng câu lệnh IF để kiểm tra xem khóa có có trong từ điển hay không.using has_key() method Using has_key() method returns true if a given key is available in the dictionary, otherwise, it returns a false. With the Inbuilt method has_key(), use the if statement to check if the key is present in the dictionary or not.

Làm thế nào để bạn tìm thấy một giá trị cụ thể trong danh sách Python?

Sử dụng danh sách hiểu và hàm liệt kê () để có được các chỉ số của tất cả các lần xuất hiện của một mục trong danh sách.Một cách khác để tìm các chỉ số của tất cả các lần xuất hiện của một mục cụ thể là sử dụng khả năng hiểu danh sách.Danh sách hiểu là một cách để tạo một danh sách mới dựa trên một danh sách hiện có.. Another way to find the indices of all the occurrences of a particular item is to use list comprehension. List comprehension is a way to create a new list based on an existing list.

Làm thế nào để bạn kiểm tra xem một giá trị có phải là một python từ điển?

Kiểm tra xem biến có phải là từ điển với toán tử IS, chúng ta có thể sử dụng toán tử IS với kết quả của một cuộc gọi loại () với một biến và lớp Dict.Nó sẽ chỉ xuất chỉ nếu loại () trỏ đến cùng một vị trí bộ nhớ với lớp Dict.Nếu không, nó sẽ xuất hiện sai.use the is operator with the result of a type() call with a variable and the dict class. It will output True only if the type() points to the same memory location as the dict class. Otherwise, it will output False .