发觉很多python coding不怎么用,很多基本结构有所生疏。近期会持续把常用的数据结构用python搞一搞,会更新:
d = {} res = '' for i in range(11): d[i] = chr(i) for i in range(11): key = list(d.keys())[i] value = d[key] new_char = chr(key+ ord(value)) res += new_char print(res)
回文测试:
def isPalindrome(self, s: str) -> bool: s= [c.lower() for c in s if c.isalnum()] return all (s[i] == s[~i] for i in range(len(s)//2))
class Color: def __init__(self, suffix): self.suffix = suffix self.title = f"Golden {suffix}" def __repr__(self): return f"Color('{self.suffix}')" c1 = Color("Yellow") # create another object with same params as c1 # using eval() on repr() c2 = eval(repr(c1)) print("c1.title:", c1.title) print("c2.title:", c2.title)
Output:
c1.title: Golden Yellow c2.title: Golden Yellow
__init__() method that takes a suffix parameter and sets an instance variable self. suffix to that value.
It also sets another instance variable self. title to a string that includes
the suffix. Finally, it defines an __repr__() method that returns a string representation of the object.
You just called __str__ You just called __repr__ You just called __str__ #below code: class Cylinder: pi = 3.14 def __init__(self, radius, height): self.radius = radius self.height = height def __str__(self): return "You just called __str__" def __repr__(self): return "You just called __repr__" cylinderOne = Cylinder(3, 6) print(cylinderOne) print(repr(cylinderOne)) print(str(cylinderOne))
1863. Sum of All Subset XOR Totals
The XOR total of an array is defined as the bitwise XOR
of all its elements, or 0
if the array is empty.
- For example, the XOR total of the array
[2,5,6]
is2 XOR 5 XOR 6 = 1
.
Given an array nums
, return the sum of all XOR totals for every subset of nums
.
Note: Subsets with the same elements should be counted multiple times.
An array a
is a subset of an array b
if a
can be obtained from b
by deleting some (possibly zero) elements of b
.
Example 1:
Input: nums = [1,3] Output: 6 Explanation: The 4 subsets of [1,3] are: - The empty subset has an XOR total of 0. - [1] has an XOR total of 1. - [3] has an XOR total of 3. - [1,3] has an XOR total of 1 XOR 3 = 2. 0 + 1 + 3 + 2 = 6
Example 2:
Input: nums = [5,1,6] Output: 28 Explanation: The 8 subsets of [5,1,6] are: - The empty subset has an XOR total of 0. - [5] has an XOR total of 5. - [1] has an XOR total of 1. - [6] has an XOR total of 6. - [5,1] has an XOR total of 5 XOR 1 = 4. - [5,6] has an XOR total of 5 XOR 6 = 3. - [1,6] has an XOR total of 1 XOR 6 = 7. - [5,1,6] has an XOR total of 5 XOR 1 XOR 6 = 2. 0 + 5 + 1 + 6 + 4 + 3 + 7 + 2 = 28
Example 3:
Input: nums = [3,4,5,6,7,8] Output: 480 Explanation: The sum of all XOR totals for every subset is 480.
该代码使用按位OR运算符|计算输入列表中所有数字的按位OR,并将其存储在变量all_or中。然后,它使用左位移运算符<<计算可能的数字子集的总数,即2^n,其中n是列表的长度,并从中减去1,以获得不包括空集的子集数。最后,它将all_or与子集的数量相乘,以获得所有子集的XOR之和。
请注意,此代码实际上不会生成所有子集并计算其XOR,这将是具有O(2^n)时间复杂度的蛮力方法。相反,它使用XOR运算的数学属性,即两个相等数的XOR为0,0的数的XOR是数本身,并使用公式计算答案。这种方法的时间复杂度为O(n),对于较大的输入来说更有效。