循环处理列表中的项目,直到所有项目处理完成
我发现了一些类似但不完全相同的问题,链接分别是 742371 和 4081217,里面有很好的回答,但我还是没找到解决我问题的方法。
我想在遍历一个列表的时候,处理列表里的项目,并且如果某些项目还没有满足条件,就重新遍历剩下的项目。这个条件最终会对列表里的所有项目都成立,但不一定是在“已知”的某次循环中。这让我想起了构建树的过程,因为列表中的某些项目必须在其他项目之前处理,但其他项目可能会先被遍历。
我最初的想法是创建一个递归函数,并编辑列表的一个切片副本。不过我运气不太好~
我一开始不知道需要多少次遍历,但遍历的次数绝对不会超过列表中的元素数量……因为至少有一个元素总是会满足条件为真。
理想情况下,结果应该像下面这样
# initial list
myList = ['it1', 'test', 'blah', 10]
newList = []
# first pass
newList = ['test']
# 2nd pass
newList = ['test', 'blah', 10]
# 3rd pass
newList = ['test', 'blah', 10, 'it1']
3 个回答
一种简单粗暴的方法是创建一个和你原始列表大小一样的临时布尔值列表,初始时所有值都设为 False
。
在每次检查时,只要原始列表中索引 i
的项满足条件,就把临时数组中索引 i
的值更新为 True
。
在接下来的每次检查中,只关注那些对应索引为 False
的值。等到所有值都变成 True
时就停止。
想想看,最好还是保持一个满足条件的索引集合。没错,集合比布尔值数组更好用。
这样怎么样呢(我随便编了个简单的条件来测试一下):
import random
myList = ['it1', 'test', 'blah', 10]
newList = []
def someCondition(var):
return random.randrange(0,2) == 0
def test():
while len(myList) > 0:
pos = 0
while pos < len(myList):
if someCondition(myList[pos]): # with someCondition being a function here
newList.append(myList.pop(pos))
else:
pos += 1
if __name__ == '__main__':
test()
print(myList)
print(newList)
[结果:]
[]
['it1', 10, 'blah', 'test']
当然可以!请看下面的内容:
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在程序中使用这些数据。这个过程就像是从冰箱里拿食材,然后用这些食材做饭。
当我们提到“数据结构”时,可以把它想象成一个容器,用来存放我们需要的数据。就像一个抽屉,里面可以放很多东西,比如文件、书籍等。不同的抽屉(数据结构)可以用来存放不同类型的东西(数据)。
有些数据结构可以快速找到我们需要的数据,有些则适合存放大量的数据。选择合适的数据结构就像选择合适的抽屉,能让我们更方便地找到和使用里面的东西。
在编程中,了解这些基本概念会帮助你更好地组织和管理你的代码,就像整理你的房间,让一切都井井有条。
希望这些解释能帮助你更好地理解编程中的一些基本概念!
current = ['it1', 'test', 'blah', 10]
results = []
while current:
remaining = []
for item in current:
(results if meets_conditional(item) else remaining).append(item)
current = remaining