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

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

1. 把戏1:列表推导式

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

示例1:

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

# 普通方法
squares = []
for i in range(10):
    squares.append(i ** 2)
print(squares)

# 列表推导式
squares = [i ** 2 for i in range(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 = {}
for i in range(10):
    squares_dict[i] = i ** 2
print(squares_dict)

# 字典推导式
squares_dict = {i: i ** 2 for i in range(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

# 普通方法
if age >= 18:
    result = "成年"
else:
    result = "未成年"

print(result)

# 条件表达式
result = "成年" if age >=

输出:

成年

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

4. 把戏4:解包操作

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

示例4:

交换两个变量的值。

a = 10
b = 20

# 普通方法
temp = a
a = b
b = temp

print(a, b)

# 解包操作
a, b = b, a

print(a, b)

输出:

20 10

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

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

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

示例5:

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

fruits = ["apple", "banana", "cherry"]

# 普通方法
index = 0
for fruit in fruits:
    print(f"索引 {index}: {fruit}")
    index += 1

# 使用enumerate
for index, fruit in enumerate(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]

# 普通方法
for i in range(len(names)):
    print(f"{names[i]} 的年龄是 {ages[i]}")

# 使用zip
for name, age in zip(names, ages):
    print(f"{name} 的年龄是 {age}")

输出:

Alice 的年龄是 25
Bob 的年龄是 30
Charlie 的年龄是 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 == 0 for number in numbers)
print(has_even)

# 使用all
all_odd = all(number % 2 != 0 for number in numbers)
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 = []
for i in range(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 ** 2 for i in range(10)]
print(squares_list)

# 生成器表达式
squares_gen = (i ** 2 for i in range(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 collections import Counter
import re

def count_words(filename):
    # 打开文件并读取内容
    with open(filename, "r") as file:
        text = file.read()

    # 使用正则表达式提取单词
    words = re.findall(r'\w+', text.lower())

    # 统计单词数量
    word_count = Counter(words)

    return word_count

# 调用函数
filename = "text.txt"
word_count = count_words(filename)

# 输出结果
for word, count in word_count.items():
    print(f"{word}: {count}")

输出:

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

解释:

  • 使用 with open(filename, "r") as file: 打开文件并读取内容。
  • 使用正则表达式 re.findall(r'\w+', text.lower()) 提取所有单词,并转换为小写。
  • 使用 Counter 统计每个单词出现的次数。
  • 输出结果。
责任编辑:赵宁宁 来源: 手把手PythonAI编程
相关推荐

2013-12-19 16:43:02

2011-05-06 16:36:48

SQL备份还原

2024-01-30 00:40:10

2023-10-29 17:12:26

Python编程

2023-04-20 18:45:44

2022-03-02 08:20:54

并发编程java后端开发

2024-11-01 08:00:00

2024-05-21 11:14:20

Python编程

2022-03-09 09:43:20

并发编程Java

2024-06-24 10:00:00

Python编程

2024-01-06 18:02:18

编程记录日志

2018-06-23 14:01:53

字符串Java数组

2023-05-28 22:48:29

程序员编程

2023-11-08 18:05:06

Python类型技巧

2024-09-14 09:26:17

Python网络编程

2024-07-18 15:08:27

2024-02-04 17:21:37

C++编程开发

2024-10-14 17:13:48

模块Python编程

2024-09-23 16:49:32

2024-06-26 13:11:40

点赞
收藏

51CTO技术栈公众号