十个 Python 编程中的聪明小把戏

列表推导式是一种简洁地创建新列表的方法,它可以让你一行代码搞定原本需要多行才能完成的任务。
首页 新闻资讯 行业资讯 十个 Python 编程中的聪明小把戏

9326612783375615e31136580e97c44c93e10d.png

1. 把戏1:列表推导式

列表推导式是一种简洁地创建新列表的方法。它可以让你一行代码搞定原本需要多行才能完成的任务。

示例1:

假设我们需要创建一个列表,包含0到9这10个数字的平方。

# 普通方法
squares=[]foriinrange(10):squares.append(i**2)print(squares)# 列表推导式
squares=[i**2foriinrange(10)]print(squares)

输出:

[0,1,4,9,16,25,36,49,64,81]

解释: 列表推导式的语法是 [expression for item in iterable]。这里 expression 是 i ** 2,item 是 i,iterable 是 range(10)。

2. 把戏2:字典推导式

字典推导式类似于列表推导式,但用于创建字典。

示例2:

创建一个字典,键为0到9,值为键的平方。

# 普通方法
squares_dict={}foriinrange(10):squares_dict[i]=i**2print(squares_dict)# 字典推导式
squares_dict={i:i**2foriinrange(10)}print(squares_dict)

输出:

{0:0,1:1,2:4,3:9,4:16,5:25,6:36,7:49,8:64,9:81}

解释: 字典推导式的语法是 {key: value for item in iterable}。这里 key 是 i,value 是 i ** 2,iterable 是 range(10)。

3. 把戏3:条件表达式(三元运算符)

Python中可以用一行代码实现条件判断。

示例3:

根据年龄判断是否成年。

age=25# 普通方法ifage>=18:result="成年"else:result="未成年"print(result)# 条件表达式
result="成年"ifage>=

输出:

成年

解释: 条件表达式的语法是 value_if_true if condition else value_if_false。这里 condition 是 age >= 18,value_if_true 是 "成年",value_if_false 是 "未成年"。

4. 把戏4:解包操作

解包可以方便地将列表或元组中的元素分配给多个变量。

示例4:

交换两个变量的值。

a=10b=20# 普通方法
temp=a
a=b
b=tempprint(a,b)# 解包操作
a,b=b,aprint(a,b)

输出:

2010

解释: 解包操作的语法是 var1, var2 = value1, value2。这里 var1 和 var2 分别是 a 和 b,value1 和 value2 分别是 b 和 a。

5. 把戏5:使用enumerate简化循环

enumerate函数可以在遍历列表时同时获取索引和值。

示例5:

打印列表中每个元素及其索引。

fruits=["apple","banana","cherry"]# 普通方法
index=0forfruitinfruits:print(f"索引 {index}: {fruit}")index+=1# 使用enumerateforindex,fruitinenumerate(fruits):print(f"索引 {index}: {fruit}")

输出:

索引0:apple
索引1:banana
索引2:cherry

解释: enumerate的语法是 enumerate(iterable, start=0)。这里 iterable 是 fruits,默认的起始索引是0。enumerate返回一个迭代器,每次迭代产生一个元组 (index, value)。

6. 把戏6:使用zip合并多个列表

zip函数可以将多个列表中的对应元素打包成元组。

示例6:

合并姓名和年龄列表。

names=["Alice","Bob","Charlie"]ages=[25,30,35]# 普通方法foriinrange(len(names)):print(f"{names[i]} 的年龄是 {ages[i]}")# 使用zipforname,ageinzip(names,ages):print(f"{name} 的年龄是 {age}")

输出:

Alice 的年龄是25Bob 的年龄是30Charlie 的年龄是35

解释: zip的语法是 zip(*iterables)。这里 *iterables 是 names 和 ages。zip返回一个迭代器,每次迭代产生一个元组 (name, age)。

7. 把戏7:使用any和all检查条件

any和all函数可以快速检查列表中的所有元素是否满足某个条件。

示例7:

检查列表中是否有偶数。

numbers=[1,2,3,4,5]# 使用any
has_even=any(number%2==0fornumberinnumbers)print(has_even)# 使用all
all_odd=all(number%2!=0fornumberinnumbers)print(all_odd)

输出:

True
False

解释:


  • any的语法是 any(iterable)。如果 iterable 中有任何一个元素为 True,则返回 True。

  • all的语法是 all(iterable)。如果 iterable 中的所有元素都为 True,则返回 True。

8. 把戏8:使用列表切片反转列表

列表切片可以轻松地反转列表。

示例8:

反转一个列表。

numbers=[1,2,3,4,5]# 普通方法
reversed_numbers=[]foriinrange(len(numbers)-1,-1,-1):reversed_numbers.append(numbers[i])print(reversed_numbers)# 使用切片
reversed_numbers=numbers[::-1]print(reversed_numbers)

输出:

[5,4,3,2,1]

解释: 列表切片的语法是 list[start:stop:step]。这里 start 是默认值 0,stop 是默认值 len(numbers),step 是 -1。

9. 把戏9:使用sorted排序列表

sorted函数可以轻松地对列表进行排序。

示例9:

对字符串列表按长度排序。

words=["apple","banana","cherry","date"]# 按字母顺序排序
sorted_words=sorted(words)print(sorted_words)# 按长度排序
sorted_words=sorted(words,key=len)print(sorted_words)

输出:

['apple','banana','cherry','date']['date','apple','banana','cherry']

解释: sorted的语法是 sorted(iterable, key=None, reverse=False)。这里 iterable 是 words,key 是 len 函数,表示按长度排序。

10. 把戏10:使用生成器表达式节省内存

生成器表达式可以像列表推导式一样生成数据,但不会一次性加载所有数据到内存。

示例10:

计算0到9这10个数字的平方。

# 列表推导式
squares_list=[i**2foriinrange(10)]print(squares_list)# 生成器表达式
squares_gen=(i**2foriinrange(10))print(list(squares_gen))

输出:

[0,1,4,9,16,25,36,49,64,81][0,1,4,9,16,25,36,49,64,81]

解释: 生成器表达式的语法是 (expression for item in iterable)。这里 expression 是 i ** 2,item 是 i,iterable 是 range(10)。生成器表达式返回一个生成器对象,可以逐个生成数据,节省内存。

11. 实战案例:统计文本文件中的单词数量

假设有一个文本文件 text.txt,内容如下:

Hello world
This is a test file
Python is awesome

我们可以编写一个程序来统计文件中每个单词出现的次数。

代码示例:

from collectionsimportCounterimportre

defcount_words(filename):# 打开文件并读取内容withopen(filename,"r")asfile:text=file.read()# 使用正则表达式提取单词
    words=re.findall(r'\w+',text.lower())# 统计单词数量
    word_count=Counter(words)returnword_count

# 调用函数
filename="text.txt"word_count=count_words(filename)# 输出结果forword,countinword_count.items():print(f"{word}: {count}")

输出:

hello:1world:1this:1is:2a:1test:1file:1python:1awesome:1

解释:

  • 使用 with open(filename, "r") as file: 打开文件并读取内容。

  • 使用正则表达式 re.findall(r'\w+', text.lower()) 提取所有单词,并转换为小写。

  • 使用 Counter 统计每个单词出现的次数。

  • 输出结果。

10    2024-09-23 12:00:00    Python 编程