Appending result in list or array python3

2019-08-27 08:12发布

I am using python-3.x and I have tow loops first one which is number of runs (3 times) the second one to generate solutions (2 times)

what I want to do is: Collect the best solution from the second loop and append it to an array or list. The next run which is the first loop will run the second loop again, and it will collect the best solution from the second loop and append it to the same array or list. Which I will have two solutions in each run the total will be six solutions.

the problem is: I want to append the "best solution" to same index location for the next run.

in my case, the array will end up with a size of 6, but I want it to be a size of 3 where each index will include two values (best solution)

run 1: result inside the array: index 0 "The first best solution." index 1 "The second best solution."

run 2: result inside the array: index 0 "The first best solution." "The first best solution."

index 1 "The second best solution." "The second best solution."

If you take a look at the code and the result it will be more clear what I am trying to do? any advice or help you could provide would be much appreciated

import matplotlib.pyplot as plt
import math
import random
import numpy as np
import pylab      
from numpy import median
import os
import subprocess as sp

run = 3
best_solutions = [np.empty(0)]
del best_solutions[0]


# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 

for i in range (run):

    lower = 300
    upper  = 500

    number_of_solutions = 50
    generate_solutions = 2 

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #    

    for ii in range (generate_solutions):     
        list_of_solutions = np.random.uniform(lower, upper, number_of_solutions)

        best_solutions.append(min(list_of_solutions))


        lower = lower - 30.4323434
        upper  = upper - 90.634555


    del (number_of_solutions) 
    del (lower)

3条回答
叼着烟拽天下
2楼-- · 2019-08-27 08:17

to make it more clear....

if the (i) = 0 if the (ii) = 0 the min(solution) from this loop will be stored in best_solutions in the index 0 if the (ii) = 1 the min(solution) from this loop will be stored in best_solutions in the index 1 if the (ii) = 2 the min(solution) from this loop will be stored in best_solutions in the index 2 and so on......

second run: if the (i) = 1 if the (ii) = 0 the min(solution) from this loop will be stored in best_solutions in the index 0 if the (ii) = 1 the min(solution) from this loop will be stored in best_solutions in the index 1 if the (ii) = 2 the min(solution) from this loop will be stored in best_solutions in the index 2 and so on......

I hope this will clarify what I want to do!!

I tried to store them by index but it gives me an error:

for i in range (run):
lower = 300
upper  = 500
number_of_solutions = 50
generate_solutions = 2 
####sub list 
solution = []
for ii in range (generate_solutions):     
    list_of_solutions = np.random.uniform(lower, upper, number_of_solutions)
#### append to the sub_list
    solution.append(min(list_of_solutions))
    lower = lower - 30.4323434
    upper  = upper - 90.634555
#### append the sub_list to best_solutions
best_solutions[ii].append(solution[ii]) ############ here I tried to store them by index
del (number_of_solutions)
del (lower)

IndexError: list index out of range !!!????

查看更多
在下西门庆
3楼-- · 2019-08-27 08:19

better work on nested list like [[1st best answer,1st best answer],[..,..]...] so you should define an other list in the second run . then append it to the result list . here's the modified code:

for i in range (run):
    lower = 300
    upper  = 500
    number_of_solutions = 50
    generate_solutions = 2 
    ####sub list 
    first_solution = []
    second_solution = []
    for ii in range (generate_solutions):     
        list_of_solutions = np.random.uniform(lower, upper, 
        number_of_solutions)
        #### append to the sub_list
        if ii == 1 :
            first_solution.append(min(list_of_solutions))
        if ii == 2 : 
            second_solution.append(min(list_of_solutions))
        lower = lower - 30.4323434
        upper  = upper - 90.634555
    del (number_of_solutions)
    del (lower)
#### append the sub_list to best_solutions after closing the loop
best_solution.append(fisrt_solution)
best_solution.append(second_solution)
查看更多
甜甜的少女心
4楼-- · 2019-08-27 08:21

Finally, I find the best way to solve my problem, this the final code that I wrote:

import random
import numpy as np

run = 3
best_solutions = [np.empty(0)]
best_sol_sorted = []
del best_solutions[0]
final_result = [np.empty(0)]
del final_result[0]

for i in range (run):
    lower = 300
    upper  = 500
    number_of_solutions = 50
    generate_solutions = 5

    ####sub list 
    solution = []

    for ii in range (generate_solutions):     
        list_of_solutions = np.random.uniform(lower, upper, number_of_solutions)

    #### append to the sub_list
        solution.append(min(list_of_solutions))
        lower = lower - 30.4323434
        upper  = upper - 90.634555
    best_solutions.append(solution)


for i in range(generate_solutions):
    for ii in range (run):
        best_sol_sorted.append(best_solutions[ii][i])
    final_result.append(best_sol_sorted)
    best_sol_sorted = []

where the last loop will do the job :) thanks for every one for giving ideas and advises

查看更多
登录 后发表回答