Arhn - архитектура программирования

Как передать список списков в *args, если количество внутренних списков неизвестно?

У меня есть функция, которая принимает позиционные аргументы в этом формате. Редактировать это невозможно для моего варианта использования (долгая история).

import pandas as pd
import numpy as np
import random

def dummy_func(*args):

    outlist = []

    for arg in args:
        arg.append(42)

        outlist.append(arg)

    return outlist

Обычно функция принимает любое количество списков целых чисел в следующем формате и обрабатывает их следующим образом:

s1 = [random.randrange(1, 101, 1) for _ in range(10)]
s2 = [random.randrange(1, 101, 1) for _ in range(10)]
s3 = [random.randrange(1, 101, 1) for _ in range(10)]

dummy_func(s1,s2,s3)

Я пытаюсь создать функцию, которая собирает список списков целых чисел для передачи в dummy_func, указанный выше. Все списки имеют одинаковую длину, но мы передаем их функции пакетами, и мы не знаем, сколько списков будет в каждом пакете.

def analyse_some_series():

    # Generate a random number of lists
    count = np.random.choice(10)

    for i in range(count):

        mylist = [random.randrange(1, 101, 1) for _ in range(10)]

        outer_list.append(mylist)

    # This does not work for some reason
    finalfunc(outer_list)

По какой-то причине, когда вы передаете список списков в функцию, она не разворачивает и не обрабатывает список списков. Вместо этого он просто видит один объект списка в неправильном формате.

Теперь обычно я бы просто сделал что-то вроде:

x,y,z = series_list

Но здесь это не сработает, поскольку мы не знаем, сколько списков будет сгенерировано.

Любая помощь, которую вы могли бы предложить, будет принята с благодарностью.

10.08.2019

Ответы:


1

Назовите это как finalfunc(*outer_list).

Астериск делает распаковку за вас.

Обратите внимание, что звездочка в сигнатуре функции означает, что несколько элементов упаковываются в один список, но при вызове функции со списком это означает, что элементы списка распаковываются в отдельные аргументы. Следовательно, звездочка означает противоположные вещи в двух местах, но она выполняет единственную разумную работу, связанную с упаковкой/распаковкой, в обеих ситуациях, поэтому я думаю, что разумно использовать один и тот же символ.

10.08.2019
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..