如何获得仅选定索引的先前索引

问题描述 投票:1回答:2

我在根据当前索引来获取先前索引的逻辑上遇到了麻烦,其中之间的元素数量有所不同。

#list of students, created from dictionary so values are messy.
studentslist = ['name','bob','school','abc','extra element','remark','breakfast','name','mom','school','def','remark','Lunch','name','job','school','ghi','remark','Lunch']    

different_students=[]
selected_students=[]  

for i in studentslist:
    if 'remark' in i:
       #seperate each student by getting last index of each student e.g 3 students so, [5,11,17]
       different_students.append(studentslist.index[i])

      #getting index of students with lunch e.g [11,17]
       if 'Lunch' in studentlist:  
          selected_students.append(studentslist.index[i])  

#for loop to return values of selected students
for i in selected_students:
   for i in range(start,studentlist[i]):
      #need help getting start value
      #e.g range(0,5), range(5,11), and range(12,17) 
      #some students has additional elements so start cannot be hard coded with a fixed number.
      #expected output is to iterate and get all elements from specified #range, e.g range(0,5) to get first student name, school, ...etc


python
2个回答
1
投票

您可以扩展使用枚举,它会为每次迭代生成一对索引和元素。我复制了您的代码,发现selected_students仅包含[12,18]。考虑到这一点,此解决方案应符合您的需求。

studentslist = ['name','bob','school','abc','extra element','remark','breakfast','name','mom','school','def','remark','Lunch','name','job','school','ghi','remark','Lunch']    

different_students = [idx for idx,element in enumerate(studentslist) if element == 'remark']
selected_students = [idx for idx,element in enumerate(studentslist) if element == 'Lunch']

desired_ranges = []
for idx, element in enumerate(selected_students):
    if idx > 0:
        desired_ranges.append((selected_students[idx-1],element))
    else:        
        desired_ranges.append((0,element))

print(different_students)
print(selected_students)
print(desired_ranges)

>>>>[5, 11, 17]
>>>>[12, 18]
>>>>[(0, 12), (12, 18)]


0
投票

在mjake的答案中for循环中的所需条件的if条件不是我真正想要的,已经这样做了,所以如果只有element =='Lunch',它将返回(11,19)而不是(0,19 )改变了学生的档位,但逻辑就在那里。


#create a list consisting of indexs of all different menu types
different_stall_no = [idx for idx,element in enumerate(list) if 'remark' in element]
different_stall_no1 = [x+1 for x in different_stall_no]
different_stall_no1.insert(0,0)

#print(different_stall_no1)

#retrieve selected stall's index number in list
selected_stall_no = [idx for idx,element in enumerate(list) if element == 'None']
#selected_stall_no.insert(0,0)
print(selected_stall_no)

desired_ranges = []

for idx, element in enumerate(different_stall_no1):
    for selectedstall in selected_stall_no
        if element == selectedstall:
            desired_ranges.append(different_stall_no1[idx-1])
            desired_ranges.append(selectedstall)

print(desired_ranges, 'this is desired range')
© www.soinside.com 2019 - 2024. All rights reserved.