首页 > 解决方案 > 如何获取仅选定索引的先前索引

问题描述

我在想出基于我当前索引的逻辑来获取前一个索引时遇到了麻烦,其中之间的元素数量不同。

#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

解决方案


您可以扩展使用 enumerate,它会为每次迭代生成索引和元素。我复制了你的代码,发现 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)]


推荐阅读