Ich habe eine Liste Verständnis mir folgendes zu bieten:Anfügen einzelnen Listen aus einer Liste Verständnis erstellt Werte von Eingang()
listoflists = [[] für i in range (252 * 5)]
Ich habe dann die Liste in variablen neuen Listen so vereinfacht, dass sie nur die Anzahl der Listen im Bereich (Wochen) enthält, die eine dynamische Variable ist.
Ich möchte jede einzelne Liste in der folgenden Schleife für einen angegebenen Bereich anfügen, wobei der Append-Prozess sich durch jede Liste bewegt, nachdem sie eine bestimmte Länge erreicht hat. Die Werte werden von einer Eingabefunktion generiert. Zum Beispiel, wenn die erste Liste in neuen Listen eine Länge von 5 überschreitet, möchte ich, dass die Werte nach der 5. Schleife dann an die nächste Liste angehängt werden und so weiter. Der Code, den ich zur Zeit habe, ist:
p = 0
singlist = []
listoflists = [[] for i in range(252*5)]
newlists= [listoflists[i] for i in range(weeks)]
while p<(int(people)*weeks): #fix appending process
for i in range(int(people)*weeks):
weekly =input("Put your hours: ")
singlist.append(int(weekly))
p += 1
if weekly.isalpha() == True:
print("Not a valid amount of time")
for i in range(0,weeks):
while len(newlists[i])<int(people):
newlists[i].append(singlist[i])
Dieser Code jedoch hängt die gleichen Werte für alle Listen in Reichweite Wochen. Was ist der effizienteste Weg, um das zu beheben? Vielen Dank!
wenn singlist = [10,15,20,25] Wunsch Ausgang für newlists ist: [[10,15], [20,25]]
Wie ich das Programm strukturiert haben:
import sys
import numpy as np
import pandas as pd
from datetime import tzinfo,timedelta,datetime
import matplotlib.pyplot as plt
import itertools as it
from itertools import count,islice
team = []
y = 0
while y == 0:
try:
people = input("How many people are on your engagement? ")
if people.isdigit() == True:
y += 1
except:
print("Not a number try again")
z= 0
while z<int(people):
for i in range(int(people)):
names = input("Name: ")
if names.isalpha() == False:
team.append(names)
z+=1
elif names.isdigit() == True:
print("Not a name try again")
ties = [] # fix looping for more than one person
e = 0
while e<int(people):
for i in range(int(people)):
title = input("What is their title: ")
if title.isdigit() == True:
print("Not a title try again")
else:
ties.append(title)
e+=1
values = [] #fix looping for more than one person
t= 0
while t <int(people):
for i in range(int(people)):
charge = input("How much are you charging for them: ")
if charge.isalpha() == True:
print("Not a valid rate")
else:
values.append(int(charge))
t +=1
weeks = int(input("How many weeks are you including: "))
days = []
x = 0
while x<weeks: #include a parameter for dates of a 7 day difference to only be permitted
try:
for i in range(int(weeks)):
dates = input("Input the dates (mm/dd/yy): ")
dt_start = datetime.strptime(dates,'%m/%d/%y')
days.append(dates)
x+=1
except:
print("Incorrect format")
p = 0
singlist = []
listoflists = [[] for i in range(252*5)]
newlists= [listoflists[i] for i in range(weeks)]
while p<(int(people)*weeks): #fix appending process
for i in range(int(people)*weeks):
weekly =input("Put your hours: ")
singlist.append(int(weekly))
p += 1
if weekly.isalpha() == True:
print("Not a valid amount of time")
def func(items,n):
items = iter(items)
for i in it.count():
out = it.islice(items,weeks*i,weeks*i+n)
if not out:
break
output = list(func(singlist,weeks))
Die Anzahl der 'len()' Funktionen könnte anzeigen, dass es einen besseren Weg gibt, es zu tun. Können Sie das ursprüngliche Problem feststellen, für das Sie diesen Code geschrieben haben? –
Ich habe den obigen Code mit dem neuen Code, den ich geschrieben habe, bearbeitet und hoffentlich den gewünschten Output hinzugefügt, der mir helfen wird zu verstehen; Das Problem, das ich löse, besteht darin, ein dynamisches Budgetierungstool zu erstellen, bei dem es mehrere Eingabeschleifen gibt, deren Werte zu einem Datenrahmen aggregieren. Die gewünschte Ausgabe, die ich will, ist in den obigen Bearbeitungen –