列表操作和递归

编程入门 行业动态 更新时间:2024-10-28 00:14:13
本文介绍了列表操作和递归的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我在pdf页面中有一个mansory-grid.网格是随机选择的,所以我不知道我必须填充多少个垂直单元格或交叉单元格.在我的列表中,我具有要继续处理的所有图像,每个图像都是直立或交叉的.我现在的方法是:

I have a mansory-grid in a pdf-page. The grid is choosen randomly, so i do not know how much upright cells or cross cells I have to fill. In my list I have all images that I want to proceed, each marked if it is upright or cross. My approach is now:

  • 获取页面的网格
  • 遍历列表并使用适合下一个网格单元的图像.
  • 从列表中删除该图像
  • 继续下一个单元格.
  • 如果页面上的网格已填充,请继续下一页(步骤1)
  • 为了测试我的方法,我使用了以下脚本:

    To test my approach, I used the following script:

    imageSet = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] def fillLayout(images): print("Images in Stack", len(images)) # Base condition to leave recursion if len(images) == 0: print("finished") return 1 idx = 0 for image in images: print(" index: ", idx, "item: ", image) del(images[idx]) # This marks the point, image is used on the cell layout and can be removed idx += 1 if idx == 5: print("break at idx: ", idx) idx = 0 break # This marks the point, grid is filled, proceed with the next page fillLayout(images) fillLayout(imageSet)

    我得到以下输出:

    Images in Stack 16 index: 0 item: 1 index: 1 item: 3 index: 2 item: 5 index: 3 item: 7 index: 4 item: 9 break at idx: 5 Images in Stack 11 index: 0 item: 2 index: 1 item: 6 index: 2 item: 10 index: 3 item: 12 index: 4 item: 14 break at idx: 5 Images in Stack 6 index: 0 item: 4 index: 1 item: 11 index: 2 item: 15 Images in Stack 3 <-- from now it does not proceed as expected index: 0 item: 8 index: 1 item: 16 Images in Stack 1 index: 0 item: 13 Images in Stack 0 finished

    我想要的是

    ... Images in Stack 6 index: 0 item: 4 index: 1 item: 11 index: 2 item: 15 index: 0 item: 8 index: 1 item: 16 break at idx: 5 Images in Stack 1 index: 0 item: 13 finished

    任何想法,我缺少什么,或如何解决我的问题.

    Any ideas what I am missing, or how to solve my problem.

    推荐答案

    对于我来说,目前尚不清楚,是否有意在每次通过时跳过项目,或者这是代码的副作用,是否是偶然的.也就是说,对我来说,这似乎是一个错误,但也许它是功能而不是错误.

    It's somewhat unclear to me if you are intentionally trying to skip items on each pass or if that's accidental on your part as a side effect of your code. That is, it looks like a bug to me, but maybe it's a feature and not a bug.

    如果我想从列表中作为一个组删除5个项目并对其进行处理,然后递归该函数,则可以这样做:

    If I wanted to remove 5 items from a list as a group and do something with them then recurse the function, I'd do this:

    def fill_layout(images): out_items = [] while len(out_items) <5 and images: out_items.append(images.pop(0)) # do something to your 5 or less items in out_items if images: fill_layout(images)

    请注意,您无需递归,只需处理函数中的所有内容即可.此外,您可以将列表切成5个长度,然后随手处理每个长度.您的方法有很多人为的复杂性,我不知道您的示例实际上需要多少—因此,我这样做是为了保留5个一组,从列表中删除并递归.可能有更简单的方法来做您想要的事情.

    Note, you don't need to recurse, you could just handle everything in the function. Further, you could just slice the list into 5 lengths and handle each one as you go. There is a lot of artificial complexity in your method and I don't know how much is actually needed from your example -- so I did this to keep the groups of 5, remove from list and recurse. There are probably simpler ways to do what you want.

    更多推荐

    列表操作和递归

    本文发布于:2023-10-13 17:06:32,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1488572.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:递归   操作   列表

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!