Làm thế nào để bạn xor danh sách trong python?

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
1 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
2 để 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
3 với
>>> %timeit for _ in repeat(None, 10**6): pass
100 loops, best of 3: 7 ms per loop
4.
>>> %timeit for _ in repeat(None, 10**6): pass
100 loops, best of 3: 7 ms per loop
4 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
4 duy nhất từng 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
1 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

Giả sử chúng ta có hai mảng arr1 và arr2. Tổng XOR của một danh sách là XOR theo bit của tất cả các phần tử của nó. Nếu danh sách chỉ có một phần tử, thì tổng XOR của nó sẽ là chính phần tử đó. Bây giờ, hãy xem xét danh sách có kết quả là mảng1[i] AND mảng2[j] (theo bit AND) cho mọi cặp chỉ mục (i, j) trong đó 0 <= i < độ dài của mảng1 và 0 <= j < độ dài của mảng2. Chúng ta phải tìm tổng XOR của danh sách đó

Vì vậy, nếu đầu vào giống như mảng1 = [5,3,4] mảng2 = [2,6], thì đầu ra sẽ là 0 vì danh sách là [5 AND 2, 5 AND 6, 3 AND 2, 3 AND 6

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

  • xor1. = 0

  • xor2. = 0

  • đối với mỗi a trong arr1, hãy làm

  • đối với mỗi a trong arr2, hãy làm

  • trả lại xor1 VÀ xor2

Thí dụ

Hãy cùng xem cách triển khai sau để hiểu rõ hơn

________số 8

Đầu vào

[5,3,4], [2,6]

đầu ra

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

Làm thế nào để bạn xor danh sách trong python?

Cập nhật ngày 08-Oct-2021 08. 24. 37

Bài viết này sẽ giúp bạn khám phá cách chúng ta có thể thực hiện thao tác XOR theo bit bằng ngôn ngữ lập trình Python

Python XOR

Toán tử Python XOR hoặc 'độc quyền hoặc' cho phép chúng ta so sánh hai số nhị phân theo bit

Người điều hành rất đơn giản. Nó trả về 0 nếu cả hai bit giống nhau và 1 nếu ngược lại

Toán tử cũng sẽ đặt bit đầu vào thành 1 nếu một trong các bit tương tự trong toán hạng bằng 1

Trong Python, chúng ta chủ yếu sử dụng toán tử bitwise two để so sánh hai toán hạng số nguyên. Lưu ý rằng trước tiên toán tử sẽ chuyển đổi các số nguyên thành bit trước khi thực hiện so sánh

Toán tử Python XOR

Toán tử XOR trong Python được biểu thị bằng ký hiệu ^

Ví dụ – Số nguyên

Ví dụ: để thực hiện so sánh XOR theo bit trên hai số nguyên, chúng ta có thể chạy mã như được hiển thị

int_a = 10

int_b = 100

print(f"int_a(binary): {bin(int_a)}")

in( f "int_b(binary): {bin(int_b)}")

res = int_a ^ int_b<

print(res)

Trong ví dụ trên, chúng tôi bắt đầu bằng cách khai báo hai số nguyên và gán cho chúng các giá trị khác nhau

Sau đó, chúng tôi sử dụng phương thức bin() để lấy biểu diễn nhị phân của hai số nguyên

Cuối cùng, chúng tôi nhận được kết quả của hoạt động bitwise xor giữa hai số nguyên và in nó

Đoạn mã trên sẽ trả về

$ Python xor. py

int_a ( nhị phân ) . : 0b1010

int_b ( nhị phân ) . : 0b1100100

110

Lưu ý rằng toán tử sẽ trả về một số nguyên nếu hai toán hạng là số nguyên

ví dụ 2

Mặt khác, nếu toán hạng được cung cấp là giá trị Boolean, toán tử sẽ trả về giá trị Boolean

Một ví dụ minh họa được hiển thị dưới đây

a = Đúng

b = False

res = (a ^ b)

print(res)

Trong ví dụ này, chúng tôi đặt các biến là kiểu Boolean với True được biểu thị bằng 1 và Sai được biểu thị bằng 0

Chạy đoạn mã trên sẽ trở lại

trăn xor. py

True

Python XOR sử dụng Mô-đun toán tử

Bạn có biết rằng Python có mô-đun toán tử không? . Nó là một phần của thư viện chuẩn Python và chứa một tập hợp các toán tử logic được xuất dưới dạng các hàm

Nó chứa các toán tử như nhỏ hơn, nhỏ hơn hoặc bằng, bằng và nhiều toán tử khác

Bạn có thể tìm hiểu thêm trong tài nguyên dưới đây

https. // tài liệu. con trăn. org/3/library/operator. html

Một chức năng trong mô-đun toán tử là chức năng XOR. Cú pháp như hình bên dưới

toán tử . xor( a , b . )

operator.__xor__( a , b )

Hàm nhận hai giá trị và trả về xor theo bit của hai giá trị

Để sử dụng chức năng, chúng ta có thể chạy một mã ví dụ như được hiển thị

>>> từ toán tử nhập xor
>>> a = True

>>> b = False

>>> print(xor(a,b))

True

Trong ví dụ trên, chúng tôi bắt đầu bằng cách nhập hàm xor từ mô-đun toán tử

Sau đó, chúng tôi xác định hai biến kiểu Boolean và thực hiện loại trừ bitwise hoặc. Giá trị kết quả được hiển thị ở trên

Sự kết luận

Trong bài viết này, chúng ta đã học cách thực hiện XOR bitwise trong Python bằng cách sử dụng toán tử ^ và hàm xor. Tiếp tục thực hành để khám phá cách toán tử bitwise hoạt động với các đầu vào khác nhau

Bạn có thể XOR 2 liệt kê Python không?

Chương trình Python để thực hiện XOR trên hai danh sách . Tất cả các phần tử ở dạng thập phân và đầu ra cũng ở dạng thập phân. ” ^ ” đang sử dụng cho 'độc quyền hoặc' trong python. Using the zip module to use simultaneous value each from the list. All elements are in Decimal and output is also in Decimal. ” ^ ” is using for 'exclusive or' in python.

Danh sách liên kết XOR trong Python là gì?

Danh sách liên kết kép hiệu quả bộ nhớ này được gọi là Danh sách liên kết XOR hoặc Hiệu quả bộ nhớ vì danh sách sử dụng thao tác XOR theo bit để tiết kiệm dung lượng cho một địa chỉ. Trong danh sách liên kết XOR, thay vì lưu trữ địa chỉ bộ nhớ thực tế, mỗi nút lưu trữ XOR địa chỉ của nút trước và nút tiếp theo.

XOR có nghĩa là gì trong Python?

Bitwise XOR đặt các bit trong kết quả thành 1 nếu một trong hai, nhưng không phải cả hai, của các bit tương ứng trong hai toán hạng là 1