def total_sales(sales_table, product):
if product in sales_table[0]:
return sum(list(zip(*sales_table[1:]))[sales_table[0].index(product)])
return 'Product not found'
您好,有人可以解释1. zip()
之后的*是什么,以及2. sum()
中两个元素之间为什么没有逗号或中断
非常感谢
答案 0 :(得分:0)
要遍历嵌套列表,我通常使用For循环。
请访问此站点以获取有关遍历python中列表的方法的更多信息:
https://www.geeksforgeeks.org/iterate-over-a-list-in-python/
要获取列表中变量的索引(正确迭代所有嵌套列表后),请使用.index(element,start,end)。这将返回您要搜索的所需元素的索引。
有关.index()的更多信息
https://www.programiz.com/python-programming/methods/list/index
zip()函数返回一个zip对象,它是元组的迭代器,其中每个传递的迭代器中的第一项都配对在一起,然后每个传递的迭代器中的第二项都配对在一起,等等。
如果传递的迭代器具有不同的长度,则项目数最少的迭代器将决定新迭代器的长度。
sum(iterable,start)函数返回一个数字,即可迭代项中所有项的总和。
https://www.programiz.com/python-programming/methods/built-in/sum
示例:
numbers = [2.5, 3, 4, -5]
# start parameter is not provided
numbers_sum = sum(numbers)
print(numbers_sum)
# start = 10
numbers_sum = sum(numbers, 10)
print(numbers_sum)
# 4.5
# 14.5
*也可用于打开包装箱。最简单的示例是,我们具有列表,元组或字典形式的数据,并且函数带有可变参数:
from functools import reduce
primes = [2, 3, 5, 7, 11, 13]
def product(*numbers):
p = reduce(lambda x, y: x * y, numbers)
return p
product(*primes)
# 30030
product(primes)
# [2, 3, 5, 7, 11, 13]
由于product()带有变量参数,因此我们需要解压缩列表数据并将其传递给该函数。在这种情况下,如果我们将素数作为* primes传递,则素数列表的每个元素都将被解压缩,然后存储在称为数字的列表中。如果将该列表的质数传递给函数而没有拆包,则数字将只有一个质数列表,而不是所有质数元素。
答案 1 :(得分:0)
首先,*是用来解压缩其旁边的列表的,您可以检查*的python语法并了解其用法,而您遇到的另一个问题是,sum()中没有逗号,因为它里面有一个list(),sum()取一个总和为它的列表并返回它的总和。