我需要什么语法来正确地遍历此列表?

时间:2019-08-31 22:12:22

标签: python

遍历列表,尝试在if语句中使用列表,但是收到有关语法以及列表必须如何为整数或切片而不是元组的错误消息。试图了解出了什么问题。

我正在处理来自Hackerrank的挑战,我已经完成了,但是我有点受阻。本质上,我有一个名为“页面”的列表,指的是工作簿中的页面,如以下链接的挑战说明中所指定:

https://foliotek.github.io/Croppie/

pages是一个列表,其中每个元素代表工作簿中的一页,并且这些元素中的元素代表该页面上的问题编号(即:第1页的第1章有问题1、2和3,而第2页的则有问题2、3)。该章有问题4)。挑战要求我们计算工作簿中问题总数与找到的页码相匹配的问题总数。

我的第一个直觉是遍历页面,然后遍历该页面上的问题,并在该页面上问题的迭代变量与该页面的迭代变量匹配时,将其添加到计数器special_probs中。所有这些都在代码的后4行中完成。但是,在嵌套的for循环中调用我们当前所在的页面会给我一些问题。这可能是一件超级容易或愚蠢的事情,但是我很感谢您的理解,以帮助您理解为什么我不能以自己的方式做,以及需要做些什么才能使它按预期工作。如果您需要更多信息或背景,请告诉我。谢谢!

(在这种特殊情况下,我也从代码中注释了地狱。如果分散了注意力,我可以将其删除。)


n = 4 #total number of chapters (there are 5, but index "z" starts @ 0)
k = 3 #maximum number of problems allowed per page
arr = [4, 2, 6, 1, 10] #example array listing the # of problems per chapter
pages = [0] #total number of pages in workbook (added 0 so pages start on 1)
z = 0 #chapter index counter
prob_increment = 0 #helps properly number multi-page chapters
special_probs = 0 #counter for all special problems 

while z <= n: #indexing through chapters, filling 1 at a time with problems
    pages_in_chapter = -(-arr[z]//k) #no more than k problems per page 
    if arr[z] <= k: #if all problems in the chapter fit on 1 page...
        new_page_proto = list(range(arr[z])) 
        new_page = [y+1 for y in new_page_proto] 
        pages.append(new_page) #adds completed page to the workbook's pages
    else: #for chapters with more problems than k
        chapter_probs_count = arr[z] 
        while chapter_probs_count > k: #fill pages until we have =<k left 
            new_page = list(range(k)) #create new page, add k problems
            new_page = [x+prob_increment*3 for x in new_page] #pages <1 in ch
            new_page = [y+1 for y in new_page] #fix offset again
            pages.append(new_page) #adds completed page to workbook's pages
            prob_increment = prob_increment + 1 #increase to denote new page
            chapter_probs_count = chapter_probs_count - k 
        new_page = list(range(chapter_probs_count)) #adds remaining probs <k
        new_page = [x+prob_increment*3 for x in new_page] 
        new_page = [y+1 for y in new_page] #fix offset again
        pages.append(new_page) #add the final page of the chapter to pages
    z = z + 1 #increment z & repeat the page-adding process for n chapters
    prob_increment = 0; #reset the incrementer when starting new chapter  

for y in enumerate(pages): #search for special problems 1 page at a time
    for x in enumerate(pages(y)) #compare each problem on page to page # 
        if x == pages(y): #if page 
            special_probs = special_probs + 1 

各种资源管理器报告:

页数= [0,[1,2,3],[4],[1,2],[1,2,3],[4,5,6],[1],[1,2 ,3],[4,5,6],[7,8,9],[10]]

arr = [4,2,6,1,10]

new_page = [10]

new_page_proto = [0]

z = 5

当前错误消息:

文件“ C:/Users/the_h/.spyder-py3/temp.py”,第43行     for x in enumerate(pages(y))#比较每个页面上的问题#                                                                          ^ SyntaxError:语法无效

1 个答案:

答案 0 :(得分:0)

我不确定我是否足够了解上下文,但这是我会做的。我会尝试这样的东西:

all_probs = [[[1,2,3],[4],[5]],[[1,2],[3,4,5]],[[1],[2],[3],[4,5]],...]

在此示例中,第一元素all_probs[0]是第一章。然后,元素all_probs[0][0]是第一页。我们看到第一页包含问题1,2和3,例如。

然后,您要做的就是:

counter = 0
for i in all_probs:               #selects a chapter
    for j in range(len(i)):       #goes through the pages
        for k in i[j]:            #for each problem on that page
            if k == j+1:          #if the prob nbr matches the page nbr
                counter+=1        #increment the counter