我在根据当前索引来获取先前索引的逻辑上遇到了麻烦,其中之间的元素数量有所不同。
#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
您可以扩展使用枚举,它会为每次迭代生成一对索引和元素。我复制了您的代码,发现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)]
在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')