поиск индекса переменной во вложенном списке - PullRequest
0 голосов
/ 01 августа 2020
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 голосов
/ 01 августа 2020

Сначала * предназначен для распаковки списка рядом с ним, вы можете проверить синтаксис python для * и узнать, как он используется, и другой вопрос, который у вас возник: в sum () нет запятой, потому что внутри него есть list (), а sum () берет список в суммах и возвращает их сумму.

0 голосов
/ 01 августа 2020

Для перебора вложенных списков я обычно использую циклы 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-объект, который является итератором кортежей, в котором первый элемент в каждом переданном итераторе объединяется в пары, а затем второй элемент в каждом переданном итераторе объединяется в пары et c.

Если переданные итераторы имеют разную длину, итератор с наименьшим количеством элементов определяет длину нового итератора.

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

Функция sum (итерация, начало) возвращает число, сумму всех элементов в итерации.

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 () принимает переменные аргументы, нам нужно распаковать данные нашего списка и передать их этой функции. В этом случае, если мы передаем простые числа как * простые числа, все элементы списка простых чисел будут распакованы, а затем сохранены в списке, называемом числами. Если передать этот список простых чисел в функцию без распаковки, числа будут иметь только один список простых чисел, а не все элементы простых чисел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...