各种生成式

三元表达式

在Python中,三元表达式是一种简洁的条件表达式,用于根据条件选择两个不同的值。它的语法形式如下:

value_if_true if condition else value_if_false

其中,condition是一个条件表达式,如果它的值为真(即非零、非空、非None等),则返回value_if_true;否则返回value_if_false。

x = 1 if 1 < 3 else 3

列表生成式

[expression for item in iterable if condition]

expression: 用于生成新列表中每个元素的表达式。
item: 可迭代对象中的每个元素。
iterable: 可迭代对象,如列表、字符串、元组等。
condition: 可选的条件,用于过滤元素。

data = [i for i in range(5)]
data = [i for i in range(5) if i < 3]

字典生成式

在Python中,字典生成式(Dictionary Comprehension)是一种以简洁的方式创建字典的方法。它类似于列表生成式,但是用于创建字典。

字典生成式的语法形式如下:

{key_expression: value_expression for item in iterable}

其中,key_expressionvalue_expression是根据item从可迭代对象中生成键值对的表达式。可以通过在key_expressionvalue_expression中使用item来访问可迭代对象中的每个元素。

下面是一个使用字典生成式创建字典的示例:

numbers = [1, 2, 3, 4, 5]

# 使用字典生成式创建字典,将每个数字的平方作为键,数字本身作为值
squared_dict = {num: num**2 for num in numbers}

print(squared_dict)

在上述示例中,我们定义了一个列表numbers,然后使用字典生成式将列表中的每个数字的平方作为键,数字本身作为值,创建了一个新的字典square_dict。最后,我们将字典打印出来。

输出结果为:

{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

通过使用字典生成式,我们可以以一行代码的方式根据可迭代对象创建字典。

需要注意的是,字典生成式还可以包含条件语句来过滤要添加到字典中的元素。例如,可以使用条件语句来只选择满足特定条件的元素。

nameList = ['小满', '大乔', '小乔']
heroDict = {k: None for k in nameList}

print(heroDict)  # {'小满': None, '大乔': None, '小乔': None}
data = [('小满', 3), ('大乔', 4), ('小乔', 5)]
heroDict = {name: age for name, age in data}

print(heroDict)  # {'小满': 3, '大乔': 4, '小乔': 5}

生成器表达式

在Python中,生成器表达式(Generator Expression)是一种创建生成器(Generator)的简洁方式。与列表生成式和字典生成式类似,生成器表达式允许我们使用简洁的语法来生成一个可迭代的对象。

生成器表达式的语法形式如下:

(expression for item in iterable)

其中,expression是根据item从可迭代对象中生成值的表达式。可以通过在expression中使用item来访问可迭代对象中的每个元素。

下面是一个使用生成器表达式创建生成器的示例:

numbers = [1, 2, 3, 4, 5]

# 使用生成器表达式创建生成器,生成每个数字的平方
squared_generator = (num**2 for num in numbers)

# 遍历生成器并打印每个生成的值
for value in squared_generator:
    print(value)

在上述示例中,我们定义了一个列表numbers,然后使用生成器表达式生成每个数字的平方,并创建了一个生成器square_generator。然后,我们使用for循环遍历生成器,并打印每个生成的值。

输出结果为:

1
4
9
16
25

通过使用生成器表达式,我们可以以一行代码的方式创建一个生成器对象。与列表生成式不同的是,生成器表达式是惰性求值的,只在需要时才生成值,这对于处理大量数据或无限序列非常有用。

numbers = (pow(index, 2) for index in range(1, 10))
for number in numbers:
    print(number)
1
4
9
16
25
36
49
64
81
numbers = (pow(index, 2) for index in range(1, 10))

while True:
    try:
        print(next(numbers))
    except StopIteration as e:
        break

print("已结束!")
1
4
9
16
25
36
49
64
81
已结束!

集合生成式

用的很少

names = ["小满", "大乔", "小满", "小乔", "小满", "王昭君"]
name_set = {name for name in names}

print(name_set)  # {'小乔', '小满', '王昭君', '大乔'}
print(set(names))  # {'小乔', '小满', '王昭君', '大乔'}

拉锁函数zip

zip()函数是Python内置的一个函数,用于将多个可迭代对象(例如列表、元组等)按照索引位置一一对应地打包成元组的形式。它返回一个迭代器,可以用于遍历打包后的元组。

name_list = ["小满", "大乔", "小乔", "王昭君"]
age_list = [3, 4 ,5, 6]

zipped = list(zip(name_list, age_list))
print(zipped)  # [('小满', 3), ('大乔', 4), ('小乔', 5), ('王昭君', 6)]
name_list = ["小满", "大乔", "小乔", "王昭君"]
age_list = [3, 4 ,5, 6]

hero_dict = dict(zip(name_list, age_list))
print(hero_dict)  # {'小满': 3, '大乔': 4, '小乔': 5, '王昭君': 6}

统计文件中有多少个字符

with open('结果.txt', mode='rt', encoding='utf-8') as f:  
    # 方式1:  
 total = 0  
 for line in f:  
        total += len(line)  
    print(total)  
  
    # 方式2:  
 res = sum([len(line)for line in f])  
    print(res)  
  
    # 方式3:  
 res = sum((len(line) for line in f))  
    print(res)  
    # 可以简写  
 res = sum(len(line) for line in f)  
    print(res)
posted @ 2023-12-06 11:29  小满三岁啦  阅读(12)  评论(0编辑  收藏  举报