XOR trong danh sách Python

Định nghĩa một hàm có tên là list_xor. Hàm của bạn phải có ba tham số. n,

>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
0 và
>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
1

Hàm của bạn phải trả về cho dù n chỉ có trong

>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
0 hay
>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
1

Nói cách khác, nếu n có trong cả hai danh sách hoặc không có danh sách nào, hãy trả về

>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
6. Nếu n chỉ nằm trong một trong các danh sách, hãy trả về list_xor1

Vì kích thước đầu vào là

>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
9 và bạn đang sử dụng Python 2, vấn đề đầu tiên là bạn đang tạo một danh sách các số nguyên 10**6 không cần thiết chỉ để thực hiện một vòng lặp

Thay vào đó, bạn nên sử dụng

>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
0 để tạo ra số nguyên một cách lười biếng

>>> %timeit for _ in range[10**6]: pass
10 loops, best of 3: 24.1 ms per loop
>>> %timeit for _ in xrange[10**6]: pass
f100 loops, best of 3: 8.92 ms per loop

Một tối ưu hóa vi mô nhỏ khác mà bạn có thể thực hiện ở đây là sử dụng

>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
1 với
>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
2.
>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
2 là một singleton, vì vậy, chỉ có một
>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
2 duy nhất tồn tại trong bộ nhớ và nó là đối tượng nhỏ nhất trong CPython, mặt khác, việc tạo ra 10**6 số nguyên rất tốn kém [CPython cũng lưu trữ một số trong số chúng, nhưng chúng vẫn không cần thiết ở đây]

>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop

Vì chúng tôi đang sử dụng các hàm như

>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
2,
>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
3 nhiều lần trong mã của mình, tốt hơn hết là lưu trữ chúng dưới dạng biến cục bộ, vì nếu không, chúng tôi sẽ tìm kiếm chúng ít nhất
>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
9 lần trong từ điển chung. Một cách để lưu chúng vào bộ đệm là sử dụng chúng làm giá trị mặc định cho các thuộc tính chức năng

>>> def f_simple[n]:
    for _ in xrange[n]:
        foo = [int['1'] for _ in xrange[15]]
..         
>>> def f_cached[n, int=int]:
    for _ in xrange[n]:
        foo = [int['1'] for _ in xrange[15]]
..         
>>> %timeit f_simple[10**6]
1 loops, best of 3: 3.7 s per loop
>>> %timeit f_cached[10**6]
1 loops, best of 3: 3.52 s per loop

Thay vì bắt đầu giá trị kết quả bằng

>>> %timeit for _ in repeat[None, 10**6]: pass
100 loops, best of 3: 7 ms per loop
5, chúng ta chỉ cần bắt đầu bằng 0 và chúng ta cũng có thể ngăn việc tạo danh sách 15 mục đơn giản đó

result = 0
for x in raw_input[].split[]:
    result ^= int[x]

Hiện tại giải pháp đầu tiên của bạn mất khoảng 7. 44 giây trên hệ thống của tôi và giải pháp của tôi mất khoảng 5. 6 giây, không phải là một cải tiến lớn

from itertools import islice
from functools import partial
import sys

def main5[int=int]:
    t = int[raw_input[]]
    # Take a slice of sys.stdin of size [10**6]*2
    lines = islice[sys.stdin, t*2]
    # Now lines is an iterator which is going to yield one
    # line at a time, but we're also going to read the next line[to get X]
    # with each input, so instead of doing `next[lines]` each time in
    # the loop we can create a partial function. 
    next_line = partial[next, lines]

    for line in lines:
        result = 0
        for x in line.split[]:
            result ^= int[x]
        if format[result, 'b'].zfill[32].count['1'] > int[next_line[]]:
            print 'YES'
        else:
            print 'NO'

Lưu ý rằng trong giải pháp trên, chúng tôi đang ghi vào thiết bị xuất chuẩn ngay lập tức, nếu chúng tôi có thể lưu trữ tạm thời đầu ra trong một danh sách [giả sử 1000 mục] và chúng ghi chúng cùng một lúc thì giải pháp trên mất 5. 52 giây

Ngôn ngữ nhị phân là ngôn ngữ của máy tính. Tất cả các cơ chế bên trong của máy tính xảy ra liên quan đến các bit. Các toán tử theo bit là tập hợp các toán tử cho phép lập trình viên thực hiện các phép toán theo bit trên các số nguyên. Các toán tử này cho phép lập trình viên thao tác dữ liệu cấp thấp hơn trong máy tính. Có tổng cộng sáu toán tử bitwise trong Python

  1. Bitwise AND
  2. Bitwise HOẶC
  3. Bitwise KHÔNG
  4. Bitwise XOR
  5. Dịch chuyển phải theo chiều bit
  6. Dịch chuyển trái theo chiều bit

Bài viết này thảo luận về toán tử Bitwise XOR với các ví dụ

  • Khi chúng tôi áp dụng toán tử bitwise trên hai toán hạng, các giá trị số nguyên được chuyển đổi thành dạng nhị phân của chúng - thành bit
  • Sau đó, toán tử thực hiện thao tác từng bit trên từng bit riêng lẻ
  • Sau khi hoạt động, số nhị phân được chuyển đổi thành dạng thập phân và được trả về dưới dạng đầu ra

Bây giờ, hãy để chúng tôi hiểu hoạt động của Bitwise XOR

  • Nó được gọi là "Độc quyền HOẶC". Nó loại trừ 1. 1 -> 1 điều kiện từ 'hoặc'
  • Nó là một toán tử nhị phân - được thực hiện giữa hai toán hạng
  • đại diện. a ^ b trong đó 'a' và 'b' là hai toán hạng
  • Giá trị trả về. Nó trả về một số nguyên khi được thực hiện giữa hai số nguyên và một giá trị Boolean khi được thực hiện giữa hai giá trị Boolean

Hoạt động

  1. Hai số nguyên đã cho được chuyển đổi thành dạng nhị phân
  2. Trong hai ký hiệu nhị phân
  • Nếu cả hai bit tương ứng giống nhau - [1^1], [0^0], nó trả về 0
  • Nếu cả hai bit tương ứng khác nhau - [1^0], [0^1], nó trả về 1
  • Sau khi xor được thực hiện trên tất cả các bit, số nhị phân kết quả được chuyển đổi thành số thập phân và được trả về
  • Bảng chân trị của XOR

    Bit 1 [toán hạng 1]Bit 2 [toán hạng 2]Giá trị trả về110000101011

    Hãy để chúng tôi hiểu khái niệm bằng cách sử dụng một ví dụ

    Nếu chúng ta muốn thực hiện

    3^4

    1. Cả hai số nguyên được chuyển đổi thành dạng nhị phân

    3 -> 0 1 1

    4 -> 1 0 0

    2. Bây giờ, xor được áp dụng theo chiều bit

    3. Cuối cùng, số nhị phân kết quả được chuyển đổi trở lại dạng thập phân của nó

    1 1 1 đại diện cho 7

    4. Đầu ra -> 7

    3^4 -> 7

    Bây giờ, với cùng toán hạng, chúng ta hãy viết mã cho xor

    đầu ra

    Trên các giá trị Boolean

    Chúng ta có thể thực hiện xor trên các giá trị Boolean. Khi chúng ta thao tác trên hai số nguyên, 1 tương đương với Boolean True và 0 tương đương với Boolean False

    Làm cách nào để thực hiện XOR trên danh sách bằng Python?

    Phương pháp #1. Sử dụng toán tử reduce[] + lambda + “^” . Chúng ta có thể sử dụng reduce[] để tích lũy kết quả của logic XOR được chỉ định bởi hàm lambda. Chỉ hoạt động với Python2.

    Làm cách nào để tìm giá trị XOR trong Python?

    Để lấy xor logic của hai hoặc nhiều biến trong Python. .
    Chuyển đổi đầu vào thành booleans
    Sử dụng toán tử bitwise xor [ ^ hoặc toán tử. xor ]

    Toán tử nào là XOR trong Python?

    Tổng quan về Toán tử Bitwise của Python

    Bạn có thể XOR chuỗi Python không?

    Bạn có thể đã sử dụng nhiều toán tử logic, số học và so sánh trong toán học và lập trình khi làm việc. Một trong những toán tử logic được sử dụng thường xuyên là toán tử XOR . Nó trả về chính xác điều ngược lại với kết quả của toán tử OR.

    Chủ Đề