Разделить список на l oop на основе индексов списка - PullRequest
2 голосов
/ 24 марта 2020

Это упрощенная версия некоторого кода, над которым я работаю, своего рода игрушечная модель, поэтому я могу сосредоточиться только на том, что меня беспокоит. Вот почему у меня определена функция для определения минимума, а не просто с помощью команды numpy. В моем собственном коде требуется функция, так как она не так проста, как использование существующей функции numpy.

Что я хочу сделать, так это разбить мой список на 2 списка в минимальной точке - поэтому, учитывая то, что у меня есть, я в идеале получу [15, 62, 49, 49, 4] and [100, 71, 16, 70, 62]. Однако я не понимаю этого. Я получаю все точки, хранящиеся в node1, и ничего в node2. я действительно не могу понять, почему - как вы можете видеть, я попробовал 2 способа сделать для l oop. я полностью знаю идею кода, что l oop должен работать над индексами списка и затем сохранять значения этих индексов в новых списках, node1 и node2. что я делаю не так?

#generate random list of numbers
import random
randomlist = [] #==profile_coarse
for i in range(0,10):
    n = random.randint(1,100)
    randomlist.append(n)
print(randomlist)

#define a function to find minimum
def get_min(list):
    mini=np.min(randomlist)
    return mini

node1=[]
node2=[]

for i in enumerate(randomlist):
    if i<=get_min(randomlist):
        node1.append(randomlist[i])
    else:
        node1.append(randomlist[i])
#OR

for i in range(0,len(randomlist)):
    if i<get_min(randomlist):
        node1.append(randomlist[i])
    else:
        node1.append(randomlist[i])

print(node1,node2)

что дает

[15, 62, 49, 49, 4, 100, 71, 16, 70, 62] []

Ответы [ 2 ]

2 голосов
/ 24 марта 2020

вы можете использовать встроенные функции enumerate и min:

randomlist = [15, 62, 49, 49, 4, 100, 71, 16, 70, 62]

#define a function to find minimum
def get_min(l):
    mini= min(enumerate(l), key=lambda x: x[1])
    return mini
index_min, min_val = get_min(randomlist)
node1 = randomlist[:index_min + 1]
node2 = randomlist[index_min + 1:]

print (node1, node2)

print(node1)
print(node2)

вывод:

[15, 62, 49, 49, 4] [100, 71, 16, 70, 62]
2 голосов
/ 24 марта 2020

enumerate возвращает кортеж счетчика (по умолчанию, начинающийся с 0) и одно значение из итерируемой вами передаваемой информации.

В вашем коде i будет (0, 15), (1, 62) ... et c.

Я предполагаю, что вы просто хотите сделать for i in randomlist

Имейте в виду, что использование функции min будет в любом случае поместите все значения в один узел, а не в 2, как вы хотите.

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