2017-06-04 116 views
0

我试图根据用户的数据创建列表。这个数据是一个16道问题调查,所以我想把数据分成16个答案的列表,或者是一个列表,只是我的代码如下图所示。基于两个条件创建列表

studentanswers = [] 
contains_data = False 
temp = [] 
for i in answers: 
if i == 'No data available': 
    if contains_data: 
     studentanswers.append(temp) 
     temp = [] 
     studentanswers.append([i]) 
     contains_data = False 
    else: 
     studentanswers.append([i]) 
else: 
    contains_data = True 
    if len(temp) < 16: 
     temp.append(i) 
    else: 
     studentanswers.append(temp) 
     temp = [] 
     contains_data = False 

但是,当我迭代时,数据得到正确的计数,并且一些数据被分配给错误的用户。例如,对于学生1个问题16将成为问题1学生2

+0

目前还不清楚你问什么。请分享示例输入和预期输出。 – janos

回答

0

尝试沿着这些路线的东西:

while answers: 
    if answers[0] = 'No data available': 
     studentanswers.append(['No data available']) 
     answers = answers[1:] 
    else: 
     studentanswers.append(answers[:16]) 
     answers = answers[16:] 
+0

此解决方案仅在出现“无数据可用”时划分数据。当“无数据可用”出现时,是否有办法创建一个列表,并且在列表中有16个项目后会创建一个列表? – fcb434

+0

它还会在'没有可用数据'出现时创建一个列表。看看这行 - studentanswers.append(answers [:16]) –

+0

我在结束时出现了一些错误,我将它们清理干净了,这个工作很完美,谢谢! – fcb434

-1

你的问题不清楚,如果我这样做是正确,你想要的清单每个学生的答案。

如果是这样的话,那么这应该足够了:

studentanswers = list() 
for x in range(len(answers)/16): 
    sudentsanswers.append(list(answers[y*16:(y+1)*16]) 

这里假设你有每个学生16个回答。

编辑,我刚才看到你的其他评论,这将工作:

studentanswers = list() 
studentanswers.append(list()) 
c = int(0) 
for x in range(len(answers)): 
    if (c<16 && x != "No data available"): 
     studentanswers[len(studentanswers)-1].append(x) 
     c+=1 
    else: 
     c=0 
     studentanswers.append(list()) 
     studentanswers[len(studentanswers)-1].append(x) 
     if x == "No data available": 
      studentanswers.append(list())