跳到主要内容
Python 编程的 100 个实用技巧 | 极客日志
Python AI 算法
Python 编程的 100 个实用技巧 Python 编程技巧涵盖循环控制、数据结构操作、字符串处理、类与对象、模块应用等 100 个知识点。涉及 for-else 结构、列表解包、堆排序、推导式、枚举、字符串切片、运算符重载、深浅拷贝、迭代器构建及 UUID 生成等实用方法。旨在通过精简代码提升开发效率与可读性。
极客零度 发布于 2025/2/3 更新于 2026/6/4 18 浏览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))
print (heapq.nsmallest(5 , scores))
4、将列表中的所有元素作为参数传递给函数
我们可以使用 * 号,提取列表中所有的元素。
my_list = [1 , 2 , , ]
(my_list)
(*my_list)
3
4
print
print
如此便可以将列表中的所有元素,作为参数传递给函数。
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)
5、获取列表的所有中间元素 _, *elements_in_the_middle, _ = [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ]
print (elements_in_the_middle)
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)
推导式不仅列表能用,字典、集合、生成器也能使用。下面看一下,使用字典推导式,将字典的值提高一倍。
dictionary = {'a' : 4 , 'b' : 5 }
squared_dictionary = {key: num * num for (key, num) in dictionary.items()}
print (squared_dictionary)
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)
print (Status.COMPLETED.value)
9、重复字符串 name = "Banana"
print (name * 4 )
10、比较 3 个数字的大小 如果想比较一个值和其他两个值的大小情况,你可以使用简单的数学表达式。
x = 3
print (1 < x < 10 )
print (1 < x and x < 10 )
11、使用 1 行代码合并字典 first_dictionary = {'name' : 'Fan' , 'location' : 'Guangzhou' }
second_dictionary = {'name' : 'Fan' , 'surname' : 'Xiao' , 'location' : 'Guangdong, Guangzhou' }
result = first_dictionary | second_dictionary
print (result)
12、查找元组中元素的索引 books = ('Atomic habits' , 'Ego is the enemy' , 'Outliers' , 'Mastery' )
print (books.index('Mastery' ))
13、将字符串转换为字符串列表 假设你在函数中获得输出,原本应该是一个列表,但实际上却是一个字符串。
你可能第一时间会想到使用索引或者正则表达式。实际上,使用 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)
string = "[[1, 2, 3],[4, 5, 6]]"
my_list = string_to_list(string)
print (my_list)
14、计算两数差值 def subtract (a, b ):
return a - b
print ((subtract(1 , 3 )))
print ((subtract(3 , 1 )))
上面的这个方法,需要考虑数值的先后顺序。使用命名参数,安排顺序,这样就不会出错了。
def subtract (a, b ):
return a - b
print ((subtract(a=1 , b=3 )))
print ((subtract(b=3 , a=1 )))
15、用一个 print() 语句打印多个元素 print (1 , 2 , 3 , "a" , "z" , "this is here" , "here is something else" )
16、在同一行打印多个元素 print ("Hello" , end="" )
print ("World" )
print ("Hello" , end=" " )
print ("World" )
print ('words' , 'with' , 'commas' , 'in' , 'between' , sep=', ' )
17、打印多个值,在每个值之间使用自定义分隔符 print ("29" , "01" , "2022" , sep="/" )
print ("name" , "domain.com" , sep="@" )
18、不能在变量名的开头使用数字
19、不能在变量名的开头使用运算符
20、数字的第一位不能是 0
21、在变量名的任何地方使用下划线 这并不意味着,你可以无限使用,为了代码的易读性,还是需要合理使用。
a______b = "abcd"
_a_b_c_d = "abcd"
22、使用下划线分割数值较大的数字 print (1_000_000_000 )
print (1_234_567 )
23、反转列表 my_list = ['a' , 'b' , 'c' , 'd' ]
my_list.reverse()
print (my_list)
24、使用步进函数对字符串切片 my_string = "This is just a sentence"
print (my_string[0 :5 ])
print (my_string[0 :10 :3 ])
25、反向切片 my_string = "This is just a sentence"
print (my_string[10 :0 :-1 ])
print (my_string[10 :0 :-2 ])
26、使用开始或结束索引进行切片 my_string = "This is just a sentence"
print (my_string[4 :])
print (my_string[:3 ])
27、/和//的区别
28、==和is的区别 is:检查两个变量是否指向同一对象内存中。
==:比较两个对象的值。
first_list = [1 , 2 , 3 ]
second_list = [1 , 2 , 3 ]
print (first_list == second_list)
print (first_list is second_list)
third_list = first_list
print (third_list is first_list)
29、合并字典 dictionary_one = {"a" : 1 , "b" : 2 }
dictionary_two = {"c" : 3 , "d" : 4 }
merged = {**dictionary_one, **dictionary_two}
print (merged)
30、检查字符串是否大于另一字符串 first = "abc"
second = "def"
print (first < second)
second = "ab"
print (first < second)
31、检查字符串是否以特定字符开头 (不使用索引) my_string = "abcdef"
print (my_string.startswith("b" ))
32、使用 id() 查找变量的唯一 id print (id (1 ))
print (id (2 ))
print (id ("string" ))
33、整数、浮点数、字符串、布尔值和元组都是不可变的 当变量被赋值为整数、浮点数、字符串、布尔值、元组这些不可变类型后,该变量就会指向一个内存对象。如果重新给变量再赋值,它的内存对象就会发生改变。
number = 1
print (id (number))
print (id (1 ))
number = 3
print (id (number))
print (id (1 ))
34、字符串和元组也是不可变的 name = "Fatos"
print (id (name))
name = "fatos"
print (id (name))
35、列表、集合和字典都是可变的 cities = ["Beijing" , "Guangzhou" , "chengdu" ]
print (id (cities))
cities.append("Beijing" )
print (id (cities))
my_set = {1 , 2 , 3 , 4 }
print (id (my_set))
my_set.add(5 )
print (id (my_set))
36、把一个列表变成不可变的列表 使用 frozenset() 后,你就无法更改了。
my_set = frozenset (['a' , 'b' , 'c' , 'd' ])
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 ))
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" ))
print (check_if_anagram("Here" , "Rehe" ))
print (check_if_anagram("Know" , "Now" ))
39、获取字符的 Unicode 值 print (ord ("A" ))
print (ord ("B" ))
print (ord ("C" ))
print (ord ("a" ))
40、获取字典的键 dictionary = {"a" : 1 , "b" : 2 , "c" : 3 }
keys = dictionary.keys()
print (list (keys))
41、获取字典的值 dictionary = {"a" : 1 , "b" : 2 , "c" : 3 }
values = dictionary.values()
print (list (values))
42、交换字典的键、值位置 dictionary = {"a" : 1 , "b" : 2 , "c" : 3 }
reversed_dictionary = {j: i for i, j in dictionary.items()}
print (reversed_dictionary)
43、将布尔值转换为数字 print (int (False ))
print (float (True ))
44、在算术运算中使用布尔值 x = 10
y = 12
result = (x - False )/(y * True )
print (result)
45、将任何数据类型转换为布尔值 print (bool (.0 ))
print (bool (3 ))
print (bool ("-" ))
print (bool ("string" ))
print (bool (" " ))
46、将值转换为复数 print (complex (10 , 2 ))
print (hex (11 ))
47、在列表的第一个位置添加一个值 如果使用 append(),将从列表的最后一个位置插入新值。可以通过使用 insert(),来指定插入新元素的索引和数值。那么列表的第一个位置为 0,即下标为 0。
my_list = [3 , 4 , 5 ]
my_list.append(6 )
my_list.insert(0 , 2 )
print (my_list)
48、Lambda 函数只能在一行代码中
49、Lambda 中的条件语句应始终包含 else 语句 运行上面的代码,报错。这是由于条件表达式的特性,而不是 lambda 导致的。
50、使用 filter(),获得一个新对象 my_list = [1 , 2 , 3 , 4 ]
odd = filter (lambda x: x % 2 == 1 , my_list)
print (list (odd))
print (my_list)
51、map() 返回一个新对象 map() 函数将给定函数应用于可迭代对象 (列表、元组等),然后返回结果 (map 对象)。
my_list = [1 , 2 , 3 , 4 ]
squared = map (lambda x: x ** 2 , my_list)
print (list (squared))
print (my_list)
52、range() 的 step 参数 for number in range (1 , 10 , 3 ):
print (number, end=" " )
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 )
range_with_no_zero(3 )
54、不需要和 0 比较长度 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_first_element(elements)
print (first_result == second_result)
55、可以在同一个作用域内多次定义一个方法 def get_address ():
return "First address"
def get_address ():
return "Second address"
def get_address ():
return "Third address"
print (get_address())
56、在外部直接访问私有属性 在定义属性或方法时,在属性名或者方法名前增加两个下划线,定义的就是私有属性或方法。如果想要在外部访问,那么只需要在名称前面加上 '_类名' 变成 '_类名__名称'。
class Engineer :
def __init__ (self, name ):
self .name = name
self .__starting_salary = 62000
dain = Engineer('Dain' )
print (dain._Engineer__starting_salary)
57、检查对象的内存使用情况 import sys
print (sys.getsizeof("bitcoin" ))
58、定义一个方法,可以调用任意个参数 def get_sum (*arguments ):
result = 0
for i in arguments:
result += i
return result
print (get_sum(1 , 2 , 3 ))
print (get_sum(1 , 2 , 3 , 4 , 5 ))
print (get_sum(1 , 2 , 3 , 4 , 5 , 6 , 7 ))
59、使用 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)
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)
60、在类中使用 + 操作符 在两个 int 数据类型之间使用 + 运算符时,将得到它们的和。而在两个字符串数据类型之间使用它时,会将其合并。这个就是操作符重载,你还可以在类中使用 (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)
print (total_expenses.groceries)
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)
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)
__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 ))
63、交换字符串中字符的大小写 string = "This is just a sentence."
result = string.swapcase()
print (result)
64、检查字符串是否都是空格 string = " "
result = string.isspace()
print (result)
65、检查字符串是否都是字母或数字 name = "Password"
print (name.isalnum())
name = "Secure Password "
print (name.isalnum())
name = "S3cur3P4ssw0rd"
print (name.isalnum())
name = "133"
print (name.isalnum())
66、检查字符串是否都是字母 string = "Name"
print (string.isalpha())
string = "Firstname Lastname"
print (string.isalpha())
string = "P4ssw0rd"
print (string.isalpha())
67、根据参数删除字符 string = "This is a sentence with "
print (string.rstrip())
string = "this here is a sentence.....,,,,aaaaasd"
print (string.rstrip(".,dsa" ))
string = "ffffffffFirst"
print (string.lstrip("f" ))
68、检查字符串是否为数字 string = "seven"
print (string.isdigit())
string = "1337"
print (string.isdigit())
string = "5a"
print (string.isdigit())
string = "2**5"
print (string.isdigit())
69、检查字符串是否为中文数字
string = "四二六七三"
print (string.isdigit())
print (string.isnumeric())
70、检查字符串是否所有单词都是大写开头 string = "This is a sentence"
print (string.istitle())
string = "10 Python Tips"
print (string.istitle())
string = "How to Print A String in Python"
print (string.istitle())
string = "PYTHON"
print (string.istitle())
71、在元组中使用负索引 numbers = (1 , 2 , 3 , 4 )
print (numbers[-1 ])
print (numbers[-4 ])
72、在元组中嵌套列表和元组 mixed_tuple = (("a" *10 , 3 , 4 ), ['first' , 'second' , 'third' ])
print (mixed_tuple[1 ])
print (mixed_tuple[0 ])
73、快速统计元素在列表中出现的次数 names = ["Besim" , "Albert" , "Besim" , "Fisnik" , "Meriton" ]
print (names.count("Besim" ))
74、使用 slice() 获取元素 my_list = [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
slicing = slice (-4 , None )
print (my_list[slicing])
print (my_list[-3 ])
string = "Data Science"
slice_object = slice (5 , None )
print (string[slice_object])
75、计算元素在元组中出现的次数 my_tuple = ('a' , 1 , 'f' , 'a' , 5 , 'a' )
print (my_tuple.count('a' ))
76、获取元组中元素的索引 my_tuple = ('a' , 1 , 'f' , 'a' , 5 , 'a' )
print (my_tuple.index('f' ))
77、步进获得元组 my_tuple = (1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 )
print (my_tuple[::3 ])
78、通过索引获取子元组 my_tuple = (1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 )
print (my_tuple[3 :])
79、将列表、集合、字典中所有元素删除 my_list = [1 , 2 , 3 , 4 ]
my_list.clear()
print (my_list)
my_set = {1 , 2 , 3 }
my_set.clear()
print (my_set)
my_dict = {"a" : 1 , "b" : 2 }
my_dict.clear()
print (my_dict)
80、合并集合 first_set = {4 , 5 , 6 }
second_set = {1 , 2 , 3 }
print (first_set.union(second_set))
还可以使用 update() 方法,将第二个集合的元素插入到第一个集合中去。
first_set = {4 , 5 , 6 }
second_set = {1 , 2 , 3 }
first_set.update(second_set)
print (first_set)
81、在函数里输出结果 def is_positive (number ):
print ("Positive" if number > 0 else "Negative" )
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." )
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." )
84、任何非空字符串都为 True print (bool ("Non empty" ))
print (bool ("" ))
85、任何非空列表、元组、字典都为 True print (bool ([]))
print (bool (set ([])))
print (bool ({}))
print (bool ({"a" : 1 }))
86、None、False、0 都为 False print (bool (False ))
print (bool (None ))
print (bool (0 ))
87、在函数中使用全局变量 string = "string"
def do_nothing ():
string = "inside a method"
do_nothing()
print (string)
string = "string"
def do_nothing ():
global string
string = "inside a method"
do_nothing()
print (string)
88、计算字符串或列表中元素的数量 使用 collections 中的 Counter 计算字符串或列表中元素的数量。
from collections import Counter
result = Counter("Banana" )
print (result)
result = Counter([1 , 2 , 1 , 3 , 1 , 4 , 1 , 5 , 1 , 6 ])
print (result)
89、检查 2 个字符串是否为相同 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' ))
print (check_if_anagram('Here' , 'Rehe' ))
print (check_if_anagram('Know' , 'Now' ))
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" ))
print (check_if_anagram("Here" , "Rehe" ))
print (check_if_anagram("Know" , "Now" ))
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)} " )
91、对字符串或列表的元素进行次数排序 collections 模块的 Counter(),默认情况下是不会根据元素的频率对它们进行排序的。
from collections import Counter
result = Counter([1 , 2 , 3 , 2 , 2 , 2 , 2 ])
print (result)
print (result.most_common())
92、查找列表中出现频率最高的元素 my_list = ['1' , 1 , 0 , 'a' , 'b' , 2 , 'a' , 'c' , 'a' ]
print (max (set (my_list), key=my_list.count))
93、copy() 和 deepcopy() 的区别 浅拷贝:拷贝父对象,但是不会拷贝对象的内部的子对象。
深拷贝:拷贝父对象,以及其内部的子对象。
first_list = [[1 , 2 , 3 ], ['a' , 'b' , 'c' ]]
second_list = first_list.copy()
first_list[0 ][2 ] = 831
print (first_list)
print (second_list)
import copy
first_list = [[1 , 2 , 3 ], ['a' , 'b' , 'c' ]]
second_list = copy.deepcopy(first_list)
first_list[0 ][2 ] = 831
print (first_list)
print (second_list)
94、访问字典中不存在的键时,避免报错 my_dictonary = {"name" : "Name" , "surname" : "Surname" }
可以通过使用 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))
print (next (iterator))
print (next (iterator))
96、删除列表的重复项 my_set = set ([1 , 2 , 1 , 2 , 3 , 4 , 5 ])
print (list (my_set))
97、打印模块的安装位置 import pandas
print (pandas.__file__)
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)
99、sort() 和 sorted() 的区别 sort():对原始列表进行排序。
sorted():返回一个新的排序列表。
groceries = ['milk' , 'bread' , 'tea' ]
new_groceries = sorted (groceries)
print (new_groceries)
print (groceries)
groceries.sort()
print (groceries)
100、使用 uuid 模块生成唯一 ID import uuid
print (uuid.uuid1())
print (uuid.uuid4())
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online