Netlogo 基于其他列表从列表中删除多个项目

Netlogo 基于其他列表从列表中删除多个项目,netlogo,Netlogo,我有两个列表,都是相同长度的列表 清单1[[1 3 5 7][2 5 1 6]] 清单2[[0.50.30.70.1][0.10.40.60.2]] 我的任务是:如果列表2中的数字是 如果我这不是最优雅的代码,我没有时间一步一步地解释它,但是像这样的东西应该可以工作: to remove-items let list1 [[1 3 5 7 ] [2 5 1 6 ]] let list2 [[0.5 0.3 0.7 0.1] [0.1 0.4 0.6 0.2]

我有两个列表,都是相同长度的列表

清单1[[1 3 5 7][2 5 1 6]]

清单2[[0.50.30.70.1][0.10.40.60.2]]

我的任务是:如果列表2中的数字是
如果我这不是最优雅的代码,我没有时间一步一步地解释它,但是像这样的东西应该可以工作:

to remove-items

  let list1 [[1   3   5   7  ] [2   5   1   6  ]]
  let list2 [[0.5 0.3 0.7 0.1] [0.1 0.4 0.6 0.2]]  
  if length list1 != length list2 [ error "lists should be of equal length" ]

  foreach range length list1 [ i ->
    let sl1 item i list1 ; extract sublist 1
    let sl2 item i list2 ; extract sublist 2
    let indices-to-keep (
      map first                         ; extract the index from the pair
      filter [ p -> last p > 0.2 ]      ; keep the pairs where the item is <= 0.2
      (map list range (length sl2) sl2) ; build a list of index/item pairs
    )
    let replace-sublist [ [l sl] ->
      replace-item i l (map [ j -> item j sl ] indices-to-keep)
    ]
    set list1 (runresult replace-sublist list1 sl1)
    set list2 (runresult replace-sublist list2 sl2)
  ]

  print list1
  print list2

end
删除项目
让列表1[[1 3 5 7][2 5 1 6]]
let list2[[0.50.30.70.1][0.10.40.60.2]]
如果长度列表1!=长度列表2[错误“列表长度应相等”]
foreach范围长度列表1[i->
让sl1项目i列表1;提取子列表1
让sl2项目i列表2;提取子列表2
让指数保持不变(
首先映射;从对中提取索引
过滤[p->last p>0.2];保留项目所在的对
替换项目IL(映射[j->项目j sl]要保留的索引)
]
设置列表1(运行结果替换子列表列表1 sl1)
set list2(运行结果替换子列表list2 sl2)
]
打印列表1
打印列表2
结束

请注意,我颠倒了条件(即,>0.2而不是),这不是最优雅的代码,我没有时间一步一步地解释它,但类似这样的东西应该可以工作:

to remove-items

  let list1 [[1   3   5   7  ] [2   5   1   6  ]]
  let list2 [[0.5 0.3 0.7 0.1] [0.1 0.4 0.6 0.2]]  
  if length list1 != length list2 [ error "lists should be of equal length" ]

  foreach range length list1 [ i ->
    let sl1 item i list1 ; extract sublist 1
    let sl2 item i list2 ; extract sublist 2
    let indices-to-keep (
      map first                         ; extract the index from the pair
      filter [ p -> last p > 0.2 ]      ; keep the pairs where the item is <= 0.2
      (map list range (length sl2) sl2) ; build a list of index/item pairs
    )
    let replace-sublist [ [l sl] ->
      replace-item i l (map [ j -> item j sl ] indices-to-keep)
    ]
    set list1 (runresult replace-sublist list1 sl1)
    set list2 (runresult replace-sublist list2 sl2)
  ]

  print list1
  print list2

end
删除项目
让列表1[[1 3 5 7][2 5 1 6]]
let list2[[0.50.30.70.1][0.10.40.60.2]]
如果长度列表1!=长度列表2[错误“列表长度应相等”]
foreach范围长度列表1[i->
让sl1项目i列表1;提取子列表1
让sl2项目i列表2;提取子列表2
让指数保持不变(
首先映射;从对中提取索引
过滤[p->last p>0.2];保留项目所在的对
替换项目IL(映射[j->项目j sl]要保留的索引)
]
设置列表1(运行结果替换子列表列表1 sl1)
set list2(运行结果替换子列表list2 sl2)
]
打印列表1
打印列表2
结束

请注意,我颠倒了条件(即,>0.2,而不是您可以尝试合并两个超级列表,然后根据需要比较内部列表的每个索引,因此`int I=0;int j=mergedList.length/2;int k=0;for(int inc;inc 4){k=0;I++;j++}}`这只是我没有测试过的伪代码,但我希望它能有所帮助。如果你尝试合并两个超级列表,然后根据需要比较内部列表的每个索引,那么`int i=0;int j=mergedList.length/2;int k=0;for(int inc;inc 4){k=0;i++;j++}}`这只是我没有测试过的伪代码,但我希望它能帮上忙。会尝试一下,thanx a lotThanx很多,也会尝试一下,如上所述你运气好吗?thanx a lot,也会尝试一下,如上所述你运气好吗?