列表推导式是一种简洁地创建新列表的方法。它可以让你一行代码搞定原本需要多行才能完成的任务。
示例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:
创建一个字典,键为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)。
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:
交换两个变量的值。
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。
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)。
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)。
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:
反转一个列表。
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。
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:
计算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)。生成器表达式返回一个生成器对象,可以逐个生成数据,节省内存。
假设有一个文本文件 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 统计每个单词出现的次数。
输出结果。