提问人:user14232195 提问时间:10/24/2023 更新时间:10/24/2023 访问量:45
有没有办法避免在分配列表时生成嵌套列表?
Is there a way to avoid producing nested lists when allocating lists?
问:
如果您想查看完整的代码/自己运行程序,这里有一个 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
输出:您可以查看如何将任务中的列表移动到位置列表
- 名称:sJ\Q# 当前任务:2 个任务列表:[[[66, 81]], [[83, 41]]] 队列大小阈值:5 个位置:[[77, 49], [48, 59], [71, 35], [67, 85]]
任务从任务列表移动到位置列表
- 名称: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
如果有人能帮我,那就太好了!
答:
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_elements
result
selected_elements = input_list[:sublist_length]
result = result + selected_elements #Splice section
input_list = input_list[sublist_length:]
...它应该只有 2 个列表深度。
评论