我有两个列表,两个列表的长度始终相同。第一个是二进制,表示代理是否会移动此轮,第二个包含一组需要根据第一个列表执行某些操作的代理。类似的东西:
list1 = [0 1 1 1 0]
list2 = [turtle-1 turtle-2 turtle-55 turtle-6 turtle-8]
我的目标是创建第三个列表,其中只有活跃的海龟。因此,该清单将包括:龟2龟-55和龟-6。最好的方法是什么?
答案 0 :(得分:3)
像这样:
map last filter [first ? = 1] (map list list1 list2)
示例运行:
observer> crt 10
observer> set list1 [0 1 1 1 0]
observer> set list2 map turtle [1 2 5 6 8]
observer> show map last filter [first ? = 1] (map list list1 list2)
observer: [(turtle 2) (turtle 5) (turtle 6)]
答案 1 :(得分:1)
我不确定你如何使用地图(地图更清洁,更有效),但是使用foreach你可以按照以下方式进行:
to test-lists
let list3 []
foreach list2 [
if (item (position ? list2) list1 = 1)[
set list3 lput ? list3
]
]
print (word "List1 is " list1)
print (word "List2 is " list2)
print (word "List3 is " list3)
end
这是输出:
List1 is [0 1 1 1 0]
List2 is [(turtle 1) (turtle 2) (turtle 55) (turtle 6) (turtle 8)]
List3 is [(turtle 2) (turtle 55) (turtle 6)]