有没有办法避免在分配列表时生成嵌套列表?

Is there a way to avoid producing nested lists when allocating lists?

提问人:user14232195 提问时间:10/24/2023 更新时间:10/24/2023 访问量:45

问:

如果您想查看完整的代码/自己运行程序,这里有一个 git 链接。

我的问题总结是:我有一个嵌套列表,该列表中的列表应该移动到他们所做的另一个列表。由于某种原因,那些被移动的列表最终被三重嵌套,如下所示:[[[66, 81]], [[83, 41]]] 而不是这样:[ ...[83,41], [66,81] ]

我制作了一个遵循预测算法 RITMO 的程序。该程序具有完成任务的节点/无人机:(移动到点)。

这将随机生成 (x,y) 值的列表。它很乱,但它仍然有效。(点根)

randomList = []
    randomList1 = []
    pointlist = []
    for i in range(1000):  #This is overkill and could be accomplished with neater code but it works.
       r=random.randint(1,100)
       r1=random.randint(1,100)
       if r not in randomList:
          randomList.append(r)
       if r1 not in randomList1:
           randomList1.append(r1)
    while len(randomList1) > numofp:
        randomList1.pop()
    while len(randomList) > numofp:
        randomList.pop()

    for i in range(0, len(randomList)):
        insidelist = []
        insidelist.append(randomList[i]) #X
        insidelist.append(randomList1[i]) #Y
        pointlist.append(insidelist) #creats massive point list.

    return pointlist

这从上面获取一个列表,并将其随机分解为(min_length & max_length)3-7 个部分。(点画家)

result = []

while input_list:
    sublist_length = random.randint(min_length, max_length) #Gen random num
    if sublist_length > len(input_list):
        sublist_length = len(input_list)

    selected_elements = input_list[:sublist_length]
    result.append(selected_elements) #Splice section
    input_list = input_list[sublist_length:]

return result
    newPointlist = break_list_into_sublists(oldPointlist, 3, 7)

    for i in range(0, AmountofNodes): #List of 5 Nodes/Drones randomly given name & points
        Nodelist.append(Node(name_gen(), newPointlist[i - 1], 5)) # 5 is queue/task max

输出:您可以查看如何将任务中的列表移动到位置列表

  1. 名称:sJ\Q# 当前任务:2 个任务列表:[[[66, 81]], [[83, 41]]] 队列大小阈值:5 个位置:[[77, 49], [48, 59], [71, 35], [67, 85]]

任务从任务列表移动到位置列表

  1. 名称:sJ\Q# 当前任务:1 个任务列表:[[[66, 81]]] 队列大小阈值:5 个位置:[[77, 49], [48, 59], [71, 35], [67, 85], [[83, 41]]]

问题是我不知道“[[[66, 81]], [[83, 41]]]” 三重嵌套列表或元素来自。他们应该只是 [ ...[83,41], [66,81] ]

可能是 Node 对象从不同节点移动任务的方式出现错误,导致不必要的嵌套 这是 Git 的链接 只有 3 个文件:main、droneobject、randomnodenamgen

如果有人能帮我,那就太好了!

python list 算法 arraylist 输出

评论

0赞 user2357112 10/24/2023
在我看来,三重嵌套正是输出的结构。您需要一个 int 的段(第 2 层)对(第 3 层)的列表(第 1 层)。
0赞 John Gordon 10/24/2023
如果你需要帮助,那么你需要发布一个简短完整的程序来证明你的问题。相反,您发布了不完整的代码,缺少大部分部分,并且来自...显然,代码的其他部分?因为它肯定不是来自这段代码。
0赞 user14232195 10/24/2023
@JohnGordon 它太大而无法在堆栈上显示,您应该下载代码自己查看。
0赞 user14232195 10/24/2023
@user2357112 嗯,我认为你是对的,我首先生成了一个列表 [ [], [], [], []...] 并将其分解 [ [], [], [] , [] , [], [], [] , [ [], [] ], ..],然后将这些列表放入节点中。我只是不明白为什么有些人的括号比其他的多

答:

0赞 SmellyCat 10/24/2023 #1

在我看来,您的第二个摘录导致了嵌套:

selected_elements = input_list[:sublist_length]
result.append(selected_elements) #Splice section
input_list = input_list[sublist_length:]

input_list是 2 元素列表的列表。所以是. 从一个空列表开始,并附加了列表列表,使其有 3 个列表深度。
如果你重写它...
selected_elementsresult

selected_elements = input_list[:sublist_length]
result = result + selected_elements #Splice section
input_list = input_list[sublist_length:]

...它应该只有 2 个列表深度。