使用input()中的值追加从列表推导创建的单个列表

时间:2016-04-03 18:11:31

标签: list list-comprehension

我创建了一个列表解析,为我提供以下内容:

listoflists = [[] for i in range(252 * 5)]

然后,我将变量新列表中的列表简化为仅包含范围(周)中的列表数量,这是一个动态变量。

我希望将以下循环中的每个单独列表附加到指定范围,并且追加过程在达到指定长度后在每个列表中移动。这些值是从输入函数生成的。例如,如果新列表中的第一个列表超过5的长度,我希望第5个循环后面的值然后附加到下一个列表,依此类推。我目前的代码是:

  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])      

但是,此代码会将相同的值附加到范围周内的所有列表中。解决此问题的最有效方法是什么?谢谢!

如果singlist = [10,15,20,25] 新名单的欲望输出是:[[10,15],[20,25]]

我如何构建程序:

    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))

1 个答案:

答案 0 :(得分:0)

# items = [1,2,3,...n]
# output = [[1,2],[3,4],..], n = 2 elements each
items_ = iter(items)
outiter = iter(lambda: [next(items_) for i in range(n)],[])
outlist = list(outiter)

您可以使用while循环替代count()代替[a:b]islice()切片操作来执行相同的操作。但是使用迭代器非常有效。