在嵌套列表中查找变量的索引

时间:2020-08-01 16:29:52

标签: python syntax

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()中两个元素之间为什么没有逗号或中断

非常感谢

2 个答案:

答案 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对象,它是元组的迭代器,其中每个传递的迭代器中的第一项都配对在一起,然后每个传递的迭代器中的第二项都配对在一起,等等。

如果传递的迭代器具有不同的长度,则项目数最少的迭代器将决定新迭代器的长度。

https://realpython.com/python-zip-function/#:~:text=Python's%20zip()%20function%20is,%2C%20sets%2C%20and%20so%20on

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()取一个总和为它的列表并返回它的总和。