list()
在Python中,list()
是一个内置函数,用于创建列表(list)对象。它有几个不同的用途,但最常见的是将一个可迭代对象(如元组、字符串、集合或其他列表)转换为一个新的列表。
以下是一些使用 list()
函数的例子:
从其他可迭代对象创建列表
你可以将一个元组、字符串或集合转换为一个列表
# 从元组创建列表
tuple_example = (1, 2, 3)
list_from_tuple = list(tuple_example)
print(list_from_tuple) # 输出:[1, 2, 3]
# 从字符串创建列表(这会将字符串拆分为单个字符的列表)
string_example = "hello"
list_from_string = list(string_example)
print(list_from_string) # 输出:['h', 'e', 'l', 'l', 'o']
# 从集合创建列表(注意集合是无序的,所以列表中的元素顺序可能与集合中的不同)
set_example = {4, 2, 3, 1}
list_from_set = list(set_example)
print(list_from_set) # 输出可能是:[4, 2, 3, 1] 或其他顺序,因为集合是无序的
创建空列表
虽然通常使用方括号 []
来创建空列表,但也可以使用 list()
函数而不带任何参数来创建空列表:
empty_list = list()
print(empty_list) # 输出:[]
列表推导式与 list() 结合使用
list()
函数还可以与生成器表达式结合使用,将生成器转换为列表:
# 使用列表推导式创建列表
square_list = [x**2 for x in range(5)]
print(square_list) # 输出:[0, 1, 4, 9, 16]
# 使用生成器表达式和 list() 创建列表
square_generator = (x**2 for x in range(5))
square_list_from_generator = list(square_generator)
print(square_list_from_generator) # 输出:[0, 1, 4, 9, 16]
在这些例子中,list()
函数用于将生成器表达式的结果转换为一个列表。生成器表达式本身并不立即计算所有值,而是返回一个生成器对象,该对象在迭代时生成值。使用 list()
函数会触发生成器的迭代,并将所有生成的值收集到一个列表中。
总的来说,list()
函数是一个强大的工具,用于从各种可迭代对象创建列表,并且可以与生成器表达式等高级特性结合使用。
map()
在Python中,map()
是一个内置函数,它接受一个函数和一个或多个可迭代对象(例如列表或元组)作为输入,并返回一个迭代器,该迭代器生成通过将函数应用于输入迭代器的每个项目而得到的结果。map()
函数常用于将一个函数应用于一个序列(或任何可迭代对象)的所有元素。
下面是一些使用 map()
函数的例子:
基本用法
假设我们有一个数字列表,我们想要计算列表中每个数字的平方:
numbers = [1, 2, 3, 4, 5]
squared = map(lambda x: x**2, numbers)
print(list(squared)) # 输出:[1, 4, 9, 16, 25]
在这个例子中,我们使用了 lambda
表达式来定义一个匿名函数 x**2
,它计算一个数的平方。然后,我们将这个匿名函数和 numbers
列表传递给 map()
函数。map()
函数返回一个迭代器,我们使用 list()
函数将其转换为一个列表以便打印。
应用于多个可迭代对象
map()
函数也可以接受多个可迭代对象,并将函数应用于这些对象的对应元素。例如,假设我们有两个列表,我们想要将它们的对应元素相加:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
sums = map(lambda x, y: x + y, list1, list2)
print(list(sums)) # 输出:[5, 7, 9]
在这个例子中,lambda
函数接受两个参数 x
和 y
,并将它们相加。map()
函数将这个函数应用于 list1
和 list2
的对应元素。
与内置函数结合使用
你也可以将 map()
与内置函数结合使用,例如将字符串列表中的所有字符串转换为大写:
strings = ["hello", "world", "python"]
uppercase_strings = map(str.upper, strings)
print(list(uppercase_strings)) # 输出:['HELLO', 'WORLD', 'PYTHON']
在这个例子中,我们直接传递了 str.upper
方法(它是一个字符串对象的方法,用于将字符串转换为大写)给 map()
函数。由于 str.upper
不需要任何额外的参数(除了它所属的字符串对象本身),所以我们只需要传递方法名而不需要 lambda
表达式。
map()
函数在函数式编程中非常有用,它允许你以一种简洁的方式对一个序列的每个元素应用一个函数。然而,请注意,map()
返回的是一个迭代器,所以如果你需要列表或其他类型的集合,你需要使用例如 list()
函数来转换它。
例题1
代码实现:
while 1:
try:
N = int(input())
for i in range(N):
l = list(map(int, input().split()))
print(sum(l))
except:
break
讲解:
这段Python代码是一个无限循环(由 while 1:
开始),用于读取输入并计算一系列数字的总和,直到遇到无法处理的异常为止。下面是对代码的详细解释:
-
while 1:
这一行开始一个无限循环,意味着代码会一直运行,直到遇到break
语句或者程序被外部中断。 -
try:
这一行开始一个try
块,用于尝试执行一段代码,并捕获可能发生的异常。 -
N = int(input())
:从标准输入读取一行文本,并尝试将其转换为整数。这通常用于获取用户希望处理的数字列表的数量。 -
for i in range(N):
根据上一步获取的N
,这个循环会执行N
次。 -
l = list(map(int, input().split()))
:在循环内部,首先读取一行文本,然后使用split()
方法将其分割成一个字符串列表。map(int, ...)
将每个字符串转换为整数,然后list(...)
将结果转换为整数列表。这个列表l
包含用户输入的一系列数字。 -
print(sum(l))
:计算列表l
中所有数字的总和,并打印结果。 -
except:
这一行捕获try
块中可能发生的任何异常。当try
块中的代码因为某种原因(如输入的不是数字,或者输入为空等)无法正确执行时,会执行except
块中的代码。 -
break
:当异常发生时,执行break
语句,跳出while
循环,终止程序。
例题2
代码实现:
import sys
for line in sys.stdin:
nums = line.split()
nums = list(map(int, nums))
n = nums[0]
if not n:
break
print(sum(nums[-n:]))
讲解:
-
导入sys模块:sys
模块提供了一些与Python解释器及其环境(如命令行参数)交互的功能。在这里,我们主要使用
sys.stdin来读取从标准输入传入的数据。 -
读取标准输入: 这行代码开始一个循环,逐行读取从
sys.stdin
传入的数据。sys.stdin
通常是从命令行、文件或管道接收的数据流。 -
处理每一行数据: 对于每一行数据,我们使用
split()
方法将其分割成一个字符串列表。默认情况下,split()
方法会根据任何空白字符(如空格、制表符等)来分割字符串。接着,我们使用map()
函数将字符串列表nums
中的每一个元素转换为整数,并将结果转换回列表。 -
获取n的值:我们取转换后的列表的第一个元素(索引为0的元素)作为变量
n
的值。 -
检查n的值: 如果
n
的值为0(在Python中,0
、None
、空字符串、空列表、空字典等都被视为False),则退出循环。这可能是用于检测输入结束的一个条件。 -
计算并打印结果: 最后,我们使用切片
nums[-n:]
来获取列表nums
中的最后n
个元素,并使用sum()
函数计算这些元素的和。然后,我们将这个和打印到标准输出。