文章转自:https://mp.weixin.qq.com/s/w5do8QYMkO_gLgPupDdJqg

分享100个Python小技巧,帮助大家更好的了解和学习Python。

▍1、for循环中的else条件

这是一个for-else方法,循环遍历列表时使用else语句。

下面举个例子,比如我们想检查一个列表中是否包含奇数。

那么可以通过for循环,遍历查找。

numbers = [2, 4, 6, 8, 1]

for number in numbers:
if number % 2 == 1:
print(number)
break
else:
print("No odd numbers")

如果找到了奇数,就会打印该数值,并且执行break语句,跳过else语句。

没有的话,就不会执行break语句,而是执行else语句。

▍2、从列表中获取元素,定义多个变量

my_list = [1, 2, 3, 4, 5]
one, two, three, four, five = my_list

▍3、使用heapq模块,获取列表中n个最大或最小的元素

import heapq

scores = [51, 33, 64, 87, 91, 75, 15, 49, 33, 82]

print(heapq.nlargest(3, scores))  # [91, 87, 82]
print(heapq.nsmallest(5, scores)) # [15, 33, 33, 49, 51]

▍4、将列表中的所有元素作为参数传递给函数

我们可以使用 * 号,提取列表中所有的元素

my_list = [1, 2, 3, 4]

print(my_list)  # [1, 2, 3, 4]
print(*my_list) # 1 2 3 4

如此便可以将列表中的所有元素,作为参数传递给函数

def sum_of_elements(*arg):
total = 0
for i in arg:
total += i return total result = sum_of_elements(*[1, 2, 3, 4])
print(result) # 10

▍5、获取列表的所有中间元素

_, *elements_in_the_middle, _ = [1, 2, 3, 4, 5, 6, 7, 8]
print(elements_in_the_middle) # [2, 3, 4, 5, 6, 7]

▍6、使用一行代码赋值多个变量

one, two, three, four = 1, 2, 3, 4

▍7、列表推导式

只用一行代码,便可完成对数组的迭代以及运算。

比如,将列表中的每个数字提高一倍。

numbers = [1, 2, 3, 4, 5]
squared_numbers = [num * num for num in numbers] print(squared_numbers) # [1, 4, 9, 16, 25]

推导式不仅列表能用,字典、集合、生成器也能使用。

下面看一下,使用字典推导式,将字典的值提高一倍。

dictionary = {'a': 4, 'b': 5}
squared_dictionary = {key: num * num for (key, num) in dictionary.items()} print(squared_dictionary) # {'a': 16, 'b': 25}

▍8、通过Enum枚举同一标签或一系列常量的集合

枚举是绑定到唯一的常量值的一组符号名称(成员)。

在枚举中,成员可以通过身份进行比较,枚举本身可以迭代。

from enum import Enum

class Status(Enum):
NO_STATUS = -1
NOT_STARTED = 0
IN_PROGRESS = 1
COMPLETED = 2 print(Status.IN_PROGRESS.name) # IN_PROGRESS
print(Status.COMPLETED.value) # 2

▍9、重复字符串

name = "Banana"
print(name * 4) # BananaBananaBananaBanana

▍10、比较3个数字的大小

如果想比较一个值和其他两个值的大小情况,你可以使用简单的数学表达式。

1 < x < 10

这个是最简单的代数表达式,在Python中也是可以使用的。

x = 3

print(1 < x < 10)  # True
print(1 < x and x < 10) # True

▍11、使用1行代码合并字典

first_dictionary = {'name': 'Fan', 'location': 'Guangzhou'}
second_dictionary = {'name': 'Fan', 'surname': 'Xiao', 'location': 'Guangdong, Guangzhou'} result = first_dictionary | second_dictionary print(result)
# {'name': 'Fan', 'location': 'Guangdong, Guangzhou', 'surname': 'Xiao'}

▍12、查找元组中元素的索引

books = ('Atomic habits', 'Ego is the enemy', 'Outliers', 'Mastery')

print(books.index('Mastery'))   # 3

▍13、将字符串转换为字符串列表

假设你在函数中获得输出,原本应该是一个列表,但实际上却是一个字符串。

input = "[1,2,3]"

你可能第一时间会想到使用索引或者正则表达式。

实际上,使用ast模块的literal_eval方法就能搞定。

import ast

def string_to_list(string):
return ast.literal_eval(string) string = "[1, 2, 3]"
my_list = string_to_list(string)
print(my_list) # [1, 2, 3] string = "[[1, 2, 3],[4, 5, 6]]"
my_list = string_to_list(string)
print(my_list) # [[1, 2, 3], [4, 5, 6]]

▍14、计算两数差值

计算出2个数字之间的差值。

def subtract(a, b):
return a - b print((subtract(1, 3))) # -2
print((subtract(3, 1))) # 2

上面的这个方法,需要考虑数值的先后顺序。

def subtract(a, b):
return a - b print((subtract(a=1, b=3))) # -2
print((subtract(b=3, a=1))) # -2

使用命名参数,安排顺序,这样就不会出错了。

▍15、用一个print()语句打印多个元素

print(1, 2, 3, "a", "z", "this is here", "here is something else")

▍16、在同一行打印多个元素

print("Hello", end="")
print("World") # HelloWorld print("Hello", end=" ")
print("World") # Hello World print('words', 'with', 'commas', 'in', 'between', sep=', ')
# words, with, commas, in, between

▍17、打印多个值,在每个值之间使用自定义分隔符

print("29", "01", "2022", sep="/")  # 29/01/2022

print("name", "domain.com", sep="@")  # name@domain.com

▍18、不能在变量名的开头使用数字

four_letters = "abcd" # this works

4_letters = "abcd" # this doesn’t work 

这是Python的变量命名规则。

▍19、不能在变量名的开头使用运算符

+variable = "abcd"  # this doesn’t work

▍20、数字的第一位不能是0

number = 0110 # this doesn't work

这个确实挺神奇的。

▍21、在变量名的任何地方使用下划线

a______b = "abcd"  # this works
_a_b_c_d = "abcd" # this also works

这并不意味着,你可以无限使用,为了代码的易读性,还是需要合理使用。

▍22、使用下划线分割数值较大的数字

print(1_000_000_000)  # 1000000000
print(1_234_567) # 1234567

如此,看到一大堆数字时,也能轻松阅读。

▍23、反转列表

my_list = ['a', 'b', 'c', 'd']

my_list.reverse()

print(my_list)  # ['d', 'c', 'b', 'a']

▍24、使用步进函数对字符串切片

my_string = "This is just a sentence"
print(my_string[0:5]) # This # Take three steps forward
print(my_string[0:10:3]) # Tsse

▍25、反向切片

my_string = "This is just a sentence"
print(my_string[10:0:-1]) # suj si sih # Take two steps forward
print(my_string[10:0:-2]) # sjs i

▍26、使用开始或结束索引进行切片

my_string = "This is just a sentence"
print(my_string[4:]) # is just a sentence print(my_string[:3]) # Thi

▍27、/和//的区别

print(3/2)  # 1.5
print(3//2) # 1

▍28、==和is的区别

is:检查两个变量是否指向同一对象内存中

==:比较两个对象的值

first_list = [1, 2, 3]
second_list = [1, 2, 3] # 比较两个值
print(first_list == second_list) # True # 是否指向同一内存
print(first_list is second_list)
# False third_list = first_list print(third_list is first_list)
# True

▍29、合并字典

dictionary_one = {"a": 1, "b": 2}
dictionary_two = {"c": 3, "d": 4} merged = {**dictionary_one, **dictionary_two} print(merged) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}

▍30、检查字符串是否大于另一字符串

first = "abc"
second = "def" print(first < second) # True second = "ab"
print(first < second) # False

▍31、检查字符串是否以特定字符开头(不使用索引)

my_string = "abcdef"
print(my_string.startswith("b")) # False

▍32、使用id()查找变量的唯一id

print(id(1))  # 4325776624
print(id(2)) # 4325776656
print(id("string")) # 4327978288

▍33、整数、浮点数、字符串、布尔值和元组都是不可变的

当变量被赋值为整数、浮点数、字符串、布尔值、元组这些不可变类型后,该变量就会指向一个内存对象。

如果重新给变量再赋值,它的内存对象就会发生改变。

number = 1
print(id(number)) # 4325215472
print(id(1)) # 4325215472 number = 3
print(id(number)) # 4325215536
print(id(1)) # 4325215472

▍34、字符串和元组也是不可变的

此处再说明一次。

name = "Fatos"
print(id(name)) # 4422282544 name = "fatos"
print(id(name)) # 4422346608

▍35、列表、集合和字典都是可变的

这意味着发生更改时,不会改变其内存对象。

cities = ["Beijing", "Guangzhou", "chengdu"]
print(id(cities)) # 4482699712 cities.append("Beijing")
print(id(cities)) # 4482699712

下面是字典。

my_set = {1, 2, 3, 4}
print(id(my_set)) # 4352726176 my_set.add(5)
print(id(my_set)) # 4352726176

▍36、把一个列表变成不可变的列表

my_set = frozenset(['a', 'b', 'c', 'd'])

my_set.add("a")

使用frozenset()后,你就无法更改了。

▍37、if-elif块可以在没有else块的情况下存在

但是elif不能在没有if语句之前独立存在。

def check_number(number):
if number > 0:
return "Positive"
elif number == 0:
return "Zero" return "Negative" print(check_number(1)) # Positive

▍38、使用sorted()检查2个字符串是否为相同

def check_if_anagram(first_word, second_word):
first_word = first_word.lower()
second_word = second_word.lower()
return sorted(first_word) == sorted(second_word) print(check_if_anagram("testinG", "Testing")) # True
print(check_if_anagram("Here", "Rehe")) # True
print(check_if_anagram("Know", "Now")) # False

▍39、获取字符的Unicode值

print(ord("A"))  # 65
print(ord("B")) # 66
print(ord("C")) # 66
print(ord("a")) # 97

▍40、获取字典的键

dictionary = {"a": 1, "b": 2, "c": 3}

keys = dictionary.keys()
print(list(keys)) # ['a', 'b', 'c']

▍41、获取字典的值

dictionary = {"a": 1, "b": 2, "c": 3}

values = dictionary.values()
print(list(values)) # [1, 2, 3]

▍42、交换字典的键、值位置

dictionary = {"a": 1, "b": 2, "c": 3}

reversed_dictionary = {j: i for i, j in dictionary.items()}
print(reversed) # {1: 'a', 2: 'b', 3: 'c'}

▍43、将布尔值转换为数字

print(int(False))  # 0
print(float(True)) # 1.0

▍44、在算术运算中使用布尔值

x = 10
y = 12 result = (x - False)/(y * True)
print(result) # 0.8333333333333334

▍45、将任何数据类型转换为布尔值

print(bool(.0))  # False
print(bool(3)) # True
print(bool("-")) # True
print(bool("string")) # True
print(bool(" ")) # True

▍46、将值转换为复数

print(complex(10, 2))  # (10+2j)

也可以将数字转换为十六进制数。

print(hex(11))  # 0xb

▍47、在列表的第一个位置添加一个值

如果使用append(),将从列表的最后一个位置插入新值。

可以通过使用insert(),来指定插入新元素的索引和数值。

那么列表的第一个位置为0,即下标为0。

my_list = [3, 4, 5]

my_list.append(6)
my_list.insert(0, 2)
print(my_list) # [2, 3, 4, 5, 6]

▍48、Lambda函数只能在一行代码中

无法通过多行代码,来使用lambda函数。

comparison = lambda x: if x > 3:
print("x > 3")
else:
print("x is not greater than 3")

报错。

▍49、Lambda中的条件语句应始终包含else语句

comparison = lambda x: "x > 3" if x > 3

运行上面的代码,报错。

这是由于条件表达式的特性,而不是lambda的导致的。

▍50、使用filter(),获得一个新对象

my_list = [1, 2, 3, 4]

odd = filter(lambda x: x % 2 == 1, my_list)

print(list(odd))   # [1, 3]
print(my_list) # [1, 2, 3, 4]

▍51、map()返回一个新对象

map()函数将给定函数应用于可迭代对象(列表、元组等),然后返回结果(map对象)。

my_list = [1, 2, 3, 4]

squared = map(lambda x: x ** 2, my_list)

print(list(squared))   # [1, 4, 9, 16]
print(my_list) # [1, 2, 3, 4]

▍52、range()的step参数

for number in range(1, 10, 3):
print(number, end=" ")
# 1 4 7

▍53、range()默认从0开始

def range_with_zero(number):
for i in range(0, number):
print(i, end=' ') def range_with_no_zero(number):
for i in range(number):
print(i, end=' ') range_with_zero(3) # 0 1 2
range_with_no_zero(3) # 0 1 2

▍54、不需要和0比较长度

如果长度大于0,则默认为True。

def get_element_with_comparison(my_list):
if len(my_list) > 0:
return my_list[0] def get_first_element(my_list):
if len(my_list):
return my_list[0] elements = [1, 2, 3, 4]
first_result = get_element_with_comparison(elements)
second_result = get_element_with_comparison(elements) print(first_result == second_result) # True

▍55、可以在同一个作用域内多次定义一个方法

但是,只有最后一个会被调用,覆盖以前。

def get_address():
return "First address" def get_address():
return "Second address" def get_address():
return "Third address" print(get_address()) # Third addres

▍56、在外部直接访问私有属性

在定义属性或方法时,在属性名或者方法名前增加两个下划线,定义的就是私有属性或方法。

如果想要在外部访问,那么只需要在名称前面加上 '_类名' 变成 '_类名__名称'。

class Engineer:
def __init__(self, name):
self.name = name
self.__starting_salary = 62000 dain = Engineer('Dain')
print(dain._Engineer__starting_salary) # 62000

▍57、检查对象的内存使用情况

import sys

print(sys.getsizeof("bitcoin"))  # 56

▍58、定义一个方法,可以调用任意个参数

def get_sum(*arguments):
result = 0
for i in arguments:
result += i
return result print(get_sum(1, 2, 3)) # 6
print(get_sum(1, 2, 3, 4, 5)) # 15
print(get_sum(1, 2, 3, 4, 5, 6, 7)) # 28

▍59、使用super()或父类的名称调用父类的初始化

使用super函数调用父类的初始化方法。

class Parent:
def __init__(self, city, address):
self.city = city
self.address = address class Child(Parent):
def __init__(self, city, address, university):
super().__init__(city, address)
self.university = university child = Child('Peking University', 'Fudan University', 'Tsinghua University')
print(child.university) # Tsinghua University 使用父类的名称调用父类。 class Parent:
def __init__(self, city, address):
self.city = city
self.address = address class Child(Parent):
def __init__(self, city, address, university):
Parent.__init__(self, city, address)
self.university = university child = Child('Peking University', 'Fudan University', 'Tsinghua University')
print(child.university) # Tsinghua University

▍60、在类中使用 + 操作符

在两个int数据类型之间使用 + 运算符时,将得到它们的和。

而在两个字符串数据类型之间使用它时,会将其合并。

print(10 + 1)  # 两数相加
print('first' + 'second') # 字符串相加

这个就是操作符重载,你还可以在类中使用(__add__)。

class Expenses:
def __init__(self, rent, groceries):
self.rent = rent
self.groceries = groceries def __add__(self, other):
return Expenses(self.rent + other.rent,
self.groceries + other.groceries) april_expenses = Expenses(1000, 200)
may_expenses = Expenses(1000, 300) total_expenses = april_expenses + may_expenses
print(total_expenses.rent) # 2000
print(total_expenses.groceries) # 500

▍61、在类中使用 < 和 == 操作符

下面定义一个操作重载示例( < 操作符),使用__lt__方法。

class Game:
def __init__(self, score):
self.score = score def __lt__(self, other):
return self.score < other.score first = Game(1)
second = Game(2) print(first < second) # True

同样的,== 操作符使用__eq__方法。

class Journey:
def __init__(self, location, destination, duration):
self.location = location
self.destination = destination
self.duration = duration def __eq__(self, other):
return ((self.location == other.location) and
(self.destination == other.destination) and
(self.duration == other.duration)) first = Journey('Location A', 'Destination A', '30min')
second = Journey('Location B', 'Destination B', '30min') print(first == second) # False

还有一些其他的定义。

__sub__() for -
__mul__() for *
__truediv__() for /
__ne__() for !=
__ge__() for >=
__gt__() for >

▍62、为类的对象定义自定义的可打印版本

class Rectangle:
def __init__(self, a, b):
self.a = a
self.b = b def __repr__(self):
return repr('Rectangle with area=' + str(self.a * self.b)) print(Rectangle(3, 4)) # 'Rectangle with area=12'

▍63、交换字符串中字符的大小写

string = "This is just a sentence."
result = string.swapcase() print(result) # tHIS IS JUST A SENTENCE.

▍64、检查字符串是否都是空格

string = "  "
result = string.isspace() print(result) # True

▍65、检查字符串是否都是字母或数字

name = "Password"
print(name.isalnum()) # True name = "Secure Password "
print(name.isalnum()) # False name = "S3cur3P4ssw0rd"
print(name.isalnum()) # True name = "133"
print(name.isalnum()) # True

▍66、检查字符串是否都是字母

string = "Name"
print(string.isalpha()) # True string = "Firstname Lastname"
print(string.isalpha()) # False string = "P4ssw0rd"
print(string.isalpha()) # False

▍67、根据参数删除字符

从右侧开始。

string = "This is a sentence with       "
print(string.rstrip()) # "This is a sentence with" string = "this here is a sentence…..,,,,aaaaasd"
print(string.rstrip(".,dsa")) # "this here is a sentence"

同样的,左侧也能操作。

string = "ffffffffFirst"
print(string.lstrip("f")) # First

▍68、检查字符串是否为数字

string = "seven"
print(string.isdigit()) # False string = "1337"
print(string.isdigit()) # True string = "5a"
print(string.isdigit()) # False string = "2**5"
print(string.isdigit()) # False

▍69、检查字符串是否为中文数字

# 42673
string = "四二六七三" print(string.isdigit()) # False
print(string.isnumeric()) # True

▍70、检查字符串是否所有单词都是大写开头

string = "This is a sentence"
print(string.istitle()) # False string = "10 Python Tips"
print(string.istitle()) # True string = "How to Print A String in Python"
print(string.istitle())  # False
string = "PYTHON" print(string.istitle()) # False

▍71、在元组中使用负索引

numbers = (1, 2, 3, 4)

print(numbers[-1])  # 4
print(numbers[-4]) # 1

▍72、在元组中嵌套列表和元组

mixed_tuple = (("a"*10, 3, 4), ['first', 'second', 'third'])

print(mixed_tuple[1])  # ['first', 'second', 'third']
print(mixed_tuple[0]) # ('aaaaaaaaaa', 3, 4)

▍73、快速统计元素在列表中出现的次数

names = ["Besim", "Albert", "Besim", "Fisnik", "Meriton"]

print(names.count("Besim"))  # 2

▍74、使用slice()获取元素

使用slice()获取最后n个元素。

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
slicing = slice(-4, None)
print(my_list[slicing]) # [7, 8, 9, 10] print(my_list[-3]) # 8

使用slice()做切片任务。

string = "Data Science"

slice_object = slice(5, None)
print(string[slice_object]) # Science

▍75、计算元素在元组中出现的次数

my_tuple = ('a', 1, 'f', 'a', 5, 'a')

print(my_tuple.count('a'))  # 3

▍76、获取元组中元素的索引

my_tuple = ('a', 1, 'f', 'a', 5, 'a')

print(my_tuple.index('f'))  #  2

▍77、步进获得元组

my_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

print(my_tuple[::3])  # (1, 4, 7, 10)

▍78、通过索引获取子元组

my_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

print(my_tuple[3:])  # (4, 5, 6, 7, 8, 9, 10)

▍79、将列表、集合、字典中所有元素删除

my_list = [1, 2, 3, 4]
my_list.clear()
print(my_list) # [] my_set = {1, 2, 3}
my_set.clear()
print(my_set) # set() my_dict = {"a": 1, "b": 2}
my_dict.clear()
print(my_dict) # {}

▍80、合并集合

使用union()方法,返回一个新集合。

first_set = {4, 5, 6}
second_set = {1, 2, 3} print(first_set.union(second_set)) # {1, 2, 3, 4, 5, 6}

还可以使用update()方法,将第二个集合的元素插入到第一个集合中去。

first_set = {4, 5, 6}
second_set = {1, 2, 3} first_set.update(second_set) print(first_set) # {1, 2, 3, 4, 5, 6}

▍81、在函数里输出结果

def is_positive(number):
print("Positive" if number > 0 else "Negative") # Positive is_positive(-3)

▍82、if语句中的多个条件

math_points = 51
biology_points = 78
physics_points = 56
history_points = 72 my_conditions = [math_points > 50, biology_points > 50,
physics_points > 50, history_points > 50] if all(my_conditions):
print("Congratulations! You have passed all of the exams.")
else:
print("I am sorry, but it seems that you have to repeat at least one exam.")
# Congratulations! You have passed all of the exams.

▍83、在一个if语句中,至少满足多个条件中的一个

math_points = 40
biology_points = 78
physics_points = 56
history_points = 72 my_conditions = [math_points > 50, biology_points > 50,
physics_points > 50, history_points > 50] if any(my_conditions):
print("Congratulations! You have passed all of the exams.")
else:
print("I am sorry, but it seems that you have to repeat at least one exam.")
# Congratulations! You have passed all of the exams.

▍84、任何非空字符串都为True

print(bool("Non empty"))  # True
print(bool("")) # False

▍85、任何非空列表、元组、字典都为True

print(bool([]))  # False
print(bool(set([]))) # False print(bool({})) # False
print(bool({"a": 1})) # True

▍86、None、False、0都为False

print(bool(False))  # False
print(bool(None)) # False
print(bool(0)) # False

▍87、在函数中使用全局变量

在函数无法直接修改全局变量的值。

string = "string"

def do_nothing():
string = "inside a method" do_nothing()

print(string) # string

可通过修饰符global,修改全局变量的值。

string = "string"

def do_nothing():
global string
string = "inside a method" do_nothing() print(string) # inside a method

▍88、计算字符串或列表中元素的数量

使用collections中的Counter计算字符串或列表中元素的数量。

from collections import Counter

result = Counter("Banana")
print(result) # Counter({'a': 3, 'n': 2, 'B': 1}) result = Counter([1, 2, 1, 3, 1, 4, 1, 5, 1, 6])
print(result) # Counter({1: 5, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1})

▍89、检查2个字符串是否为相同

可以使用Counter()方法。

from collections import Counter

def check_if_anagram(first_string, second_string):
first_string = first_string.lower()
second_string = second_string.lower()
return Counter(first_string) == Counter(second_string) print(check_if_anagram('testinG', 'Testing')) # True
print(check_if_anagram('Here', 'Rehe')) # True
print(check_if_anagram('Know', 'Now')) # False

可以使用sorted()方法。

def check_if_anagram(first_word, second_word):
first_word = first_word.lower()
second_word = second_word.lower()
return sorted(first_word) == sorted(second_word) print(check_if_anagram("testinG", "Testing")) # True
print(check_if_anagram("Here", "Rehe")) # True
print(check_if_anagram("Know", "Now")) # False

▍90、使用itertools中的count计算元素的数量

from itertools import count

my_vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']

current_counter = count()

string = "This is just a sentence."

for i in string:
if i in my_vowels:
print(f"Current vowel: {i}")
print(f"Number of vowels found so far: {next(current_counter)}")

输出如下。

Current vowel: i
Number of vowels found so far: 0
Current vowel: i
Number of vowels found so far: 1
Current vowel: u
Number of vowels found so far: 2
Current vowel: a
Number of vowels found so far: 3
Current vowel: e
Number of vowels found so far: 4
Current vowel: e
Number of vowels found so far: 5
Current vowel: e
Number of vowels found so far: 6

▍91、对字符串或列表的元素进行次数排序

collections模块的Counter(),默认情况下是不会根据元素的频率对它们进行排序的。

from collections import Counter

result = Counter([1, 2, 3, 2, 2, 2, 2])
print(result) # Counter({2: 5, 1: 1, 3: 1})
print(result.most_common()) # [(2, 5), (1, 1), (3, 1)]

▍92、查找列表中出现频率最高的元素

my_list = ['1', 1, 0, 'a', 'b', 2, 'a', 'c', 'a']

print(max(set(my_list), key=my_list.count))  # a

▍93、copy()和deepcopy()的区别

浅拷贝: 拷贝父对象,但是不会拷贝对象的内部的子对象。

深拷贝: 拷贝父对象. 以及其内部的子对象。

下面是一个copy()的例子。

first_list = [[1, 2, 3], ['a', 'b', 'c']]

second_list = first_list.copy()

first_list[0][2] = 831

print(first_list)  # [[1, 2, 831], ['a', 'b', 'c']]
print(second_list) # [[1, 2, 831], ['a', 'b', 'c']]

这里是一个deepcopy()的例子。

import copy

first_list = [[1, 2, 3], ['a', 'b', 'c']]

second_list = copy.deepcopy(first_list)

first_list[0][2] = 831

print(first_list)  # [[1, 2, 831], ['a', 'b', 'c']]
print(second_list) # [[1, 2, 3], ['a', 'b', 'c']]

▍94、访问字典中不存在的键时,避免报错

如果你想访问字典一个不存在的键,代码会报错。

my_dictonary = {"name": "Name", "surname": "Surname"}
print(my_dictonary["age"])

错误如下。

KeyError: 'age'

可以通过使用defaultdict(),代码将不会报错。

from collections import defaultdict

my_dictonary = defaultdict(str)
my_dictonary['name'] = "Name"
my_dictonary['surname'] = "Surname" print(my_dictonary["age"])

▍95、构建迭代器

class OddNumbers:
def __iter__(self):
self.a = 1
return self def __next__(self):
x = self.a
self.a += 2
return x odd_numbers_object = OddNumbers()
iterator = iter(odd_numbers_object) print(next(iterator)) # 1
print(next(iterator)) # 3
print(next(iterator)) # 5

▍96、删除列表的重复项

my_set = set([1, 2, 1, 2, 3, 4, 5])
print(list(my_set)) # [1, 2, 3, 4, 5]

▍97、打印模块的安装位置

import pandas
print(pandas) # <module 'torch' from '/Users/...'

▍98、使用not in检查一个值是否在列表中

odd_numbers = [1, 3, 5, 7, 9]
even_numbers = [] for i in range(9):
if i not in odd_numbers:
even_numbers.append(i) print(even_numbers) # [0, 2, 4, 6, 8]

▍99、sort()和sorted()的区别

sort():对原始列表进行排序

sorted():返回一个新的排序列表

groceries = ['milk', 'bread', 'tea']

new_groceries = sorted(groceries)
# new_groceries = ['bread', 'milk', 'tea'] print(new_groceries) # groceries = ['milk', 'bread', 'tea']
print(groceries) groceries.sort() # groceries = ['bread', 'milk', 'tea']
print(groceries)

▍100、使用uuid模块生成唯一ID

UUID代表唯一标识符。

import uuid

# 根据主机ID、序列号和当前时间生成UUID
print(uuid.uuid1()) # 308490b6-afe4-11eb-95f7-0c4de9a0c5af # 生成一个随机UUID
print(uuid.uuid4()) # 93bc700b-253e-4081-a358-24b60591076a

Python的100个小技巧的更多相关文章

  1. Python语言防坑小技巧

    Python语言防坑小技巧 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.赋值即定义  1>.运行以下代码会出现报错 #!/usr/bin/env python #_*_ ...

  2. 填坑总结:python内存泄漏排查小技巧

    摘要:最近服务遇到了内存泄漏问题,运维同学紧急呼叫解决,于是在解决问题之余也系统记录了下内存泄漏问题的常见解决思路. 本文分享自华为云社区<python内存泄漏排查小技巧>,作者:luti ...

  3. 一些Python的惯用法和小技巧:Pythonic

    Pythonic其实是个模糊的含义,没有确定的解释.网上也没有过多关于Pythonic的说明,我个人的理解是更加Python,更符合Python的行为习惯.本文主要是说明一些Python的惯用法和小技 ...

  4. Chrome 的 100 个小技巧 中文版

    英文原版<100 Tips For Chrome, Chrome OS and ChromeBook Users>作者博客 - chromestory.com 本文是对<100 Ti ...

  5. 关于Python ,requests的小技巧

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xie_0723/article/details/52790786 关于 Python Request ...

  6. python - opencv 的一些小技巧备忘

    python - opencv 的一些小技巧备忘 使用python-opencv来处理图像时,可以像matlab一样,将一幅图像看成一个矩阵,进行矢量操作,以加快代码运行速度. 下面记录几个常用的操作 ...

  7. python实用30个小技巧

    python实用30个小技巧 展开1.原地交换两个数字Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例: In [1]: x,y = 10 ,20 In [2]: ...

  8. Python 中的一些小技巧

    这里是本人收集的一些 Python 小技巧,目前主要是一些实用函数,适合有一定基础的童鞋观看(不会专门介绍使用到的标准库函数).. 一.函数式编程 函数式编程用来处理数据,感觉很方便.(要是再配上管道 ...

  9. 30段极简Python代码:这些小技巧你都Get了么

    学 Python 怎样才最快,当然是实战各种小项目,只有自己去想与写,才记得住规则.本文是 30 个极简任务,初学者可以尝试着自己实现:本文同样也是 30 段代码,Python 开发者也可以看看是不是 ...

  10. Python中的一些小技巧

    1.Boolean值可以当做一个数值 a = [5,6,7,8,9] print(a[True]) #prints 6 print(a[False]) #prints 5 2.两种方法实现 a = 1 ...

随机推荐

  1. flutter 2.x运行flutter run 报错Cannot run with sound null safety, because the following dependenciesdon'

    flutter 2.x运行flutter run 报错Cannot run with sound null safety, because the following dependenciesdon' ...

  2. angular父子组件传值,子组件传值给父组件,父组件又传值给子组件

  3. 字符编码,存储引擎及MySQL字段类型相关知识点

    字符编码,存储引擎及MySQL字段类型相关知识点 一.字符编码 1.在终端输入\s,查看数据库的基本信息(当前用户,版本,编码,端口号) 2.默认的配置文件是my-default.ini 拷贝上述的文 ...

  4. 主线程-创建Thread类的子类

    主线程 Java使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码.Jav ...

  5. .NET Core项目部署到Windows系统Docker

    1.新建一个ASP.NET Core Web应用(模型-视图-控制器) 2. 项目启动Docker.Docker OS选择Windows 3.系统默认的dockerfile文件如下 #See http ...

  6. C++练习12 字符串成员函数的使用

    1 #include <iostream> 2 #include <string> 3 using namespace std; 4 int main() 5 { 6 stri ...

  7. dotnet 缓存

    Net 内置内存缓存 asp.net 中是有缓存的实现:HttpContext.Cache,缓存的数据是放到 Web 服务器的进程 内存里. 在控制台.WinForm.子线程.SignalR 等不支持 ...

  8. 如何让别人pip install自己写的库?

    一. 构建项目目录结构 结构如图所示: 文件介绍:LICENSE和README.md在git建仓库时选上,克隆下来就会有,license最好选择MIT的.sort.py文件里随便写个方法用于直接调用: ...

  9. ElasticSearch7.6入门

    笔记记录 B站狂神说Java的ElasticSearch课程:https://www.bilibili.com/video/BV17a4y1x7zq 一.ElasticSearch概述 官网:http ...

  10. 有理数四则运算 PTA1034

    题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805287624491008 本题要求编写程序,计算 2 个有理数的 ...