全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 733|回复: 3

[Windows VPS] 【求助python大佬】 删除二维列表中的元素出错,版主慢移

[复制链接]
发表于 2018-7-13 21:26:31 | 显示全部楼层 |阅读模式
本帖最后由 流量之神 于 2018-7-13 21:35 编辑

算法描述:

遍历列表Users中的子列表(按照user1, user2顺序),和CSPs中的子列表匹配(用fitfun函数匹配),匹配完以后删除Users和CSPs中匹配成功的元素,剩下的元素继续匹配。


[4, 2.8, 3.1] 这个子列表删除好像出了问题啊呀,虽然删除了,但是user2还是会继续和这个子列表匹配。这个bug困扰我一天了,求斑竹慢移

------------------------------------------------------------------------------------------------------------------------------------------------

  1. import numpy
  2. G = []

  3. def fitfun(user, csp):
  4.     fitness = round(numpy.sqrt(pow((user[0] - csp[0]), 2) + pow((user[2] - csp[1]), 2)),3)
  5.     return fitness

  6. def allocation(Users, CSPs):
  7.     T = []

  8.     print('input Users Matrix:', Users)
  9.     print('input CSPs Matrix:', CSPs,'\n')

  10.     for i, user in enumerate(Users):
  11.         for j, csp in enumerate(CSPs):
  12.             if (csp[0] > user[0] and csp[1] < user[2]):
  13.                 T.append(csp)

  14.         print('updated2 Users Matrix:', Users)
  15.         print('updated2 CSPs Matrix:', CSPs)
  16.         print('user', i, 'suitCSPs:', T)
  17.         if T:
  18.             C = []
  19.             for suitcsp in T:
  20.                 result = fitfun(user, suitcsp)
  21.                 print('fitness:', result)
  22.                 C.append([result, user, suitcsp])
  23.             print('suitable group:', C,'\n')
  24.             minindex = 0
  25.             for z, item in enumerate(C):
  26.                 if item[0] < C[minindex][0]:
  27.                     minindex = z

  28.             print('minindex:', minindex)
  29.             print('dealusercsp', [C[minindex][1],C[minindex][2]],'\n')
  30.             G.append([C[minindex][1],C[minindex][2]])
  31.             print('Users Matrix:', Users)
  32.             print('CSPs Matrix:', CSPs,'\n')
  33.             Users.remove(C[minindex][1])
  34.             CSPs.remove(C[minindex][2])
  35.             print('updated Users Matrix:', Users)
  36.             print('updated CSPs Matrix:', CSPs)
  37.             print('allocation matrix:', G,'\n')

  38. def main():
  39.     Users = [[7, 24, 7, 13.6], [3, 30, 3, 5.0], [7, 41, 7, 9.4], [5, 34, 5, 7.4], [2, 18, 2, 3.8]]
  40.     CSPs = [[12, 8.4, 10.8], [12, 8.4, 8.2], [4, 2.8, 3.1], [5, 3.5, 2.0]]
  41.     round = 1
  42.     print('origin Users Matrix:', Users)
  43.     print('origin CSPs Matrix:', CSPs,'\n')
  44.     allocation(Users, CSPs)
  45.     print('round', round, 'over\n\n')

  46. if __name__ == '__main__':
  47.     main()
复制代码


输出

  1. C:\Users\KING\PycharmProjects\originauction\venv\Scripts\python.exe C:/Users/KING/PycharmProjects/originauction/temp.py
  2. origin Users Matrix: [[7, 24, 7, 13.6], [3, 30, 3, 5.0], [7, 41, 7, 9.4], [5, 34, 5, 7.4], [2, 18, 2, 3.8]]
  3. origin CSPs Matrix: [[12, 8.4, 10.8], [12, 8.4, 8.2], [4, 2.8, 3.1], [5, 3.5, 2.0]]

  4. input Users Matrix: [[7, 24, 7, 13.6], [3, 30, 3, 5.0], [7, 41, 7, 9.4], [5, 34, 5, 7.4], [2, 18, 2, 3.8]]
  5. input CSPs Matrix: [[12, 8.4, 10.8], [12, 8.4, 8.2], [4, 2.8, 3.1], [5, 3.5, 2.0]]

  6. updated2 Users Matrix: [[7, 24, 7, 13.6], [3, 30, 3, 5.0], [7, 41, 7, 9.4], [5, 34, 5, 7.4], [2, 18, 2, 3.8]]
  7. updated2 CSPs Matrix: [[12, 8.4, 10.8], [12, 8.4, 8.2], [4, 2.8, 3.1], [5, 3.5, 2.0]]
  8. user 0 suitCSPs: []
  9. updated2 Users Matrix: [[7, 24, 7, 13.6], [3, 30, 3, 5.0], [7, 41, 7, 9.4], [5, 34, 5, 7.4], [2, 18, 2, 3.8]]
  10. updated2 CSPs Matrix: [[12, 8.4, 10.8], [12, 8.4, 8.2], [4, 2.8, 3.1], [5, 3.5, 2.0]]
  11. user 1 suitCSPs: [[4, 2.8, 3.1]]
  12. fitness: 1.02
  13. suitable group: [[1.02, [3, 30, 3, 5.0], [4, 2.8, 3.1]]]

  14. minindex: 0
  15. dealusercsp [[3, 30, 3, 5.0], [4, 2.8, 3.1]]

  16. Users Matrix: [[7, 24, 7, 13.6], [3, 30, 3, 5.0], [7, 41, 7, 9.4], [5, 34, 5, 7.4], [2, 18, 2, 3.8]]
  17. CSPs Matrix: [[12, 8.4, 10.8], [12, 8.4, 8.2], [4, 2.8, 3.1], [5, 3.5, 2.0]]

  18. updated Users Matrix: [[7, 24, 7, 13.6], [7, 41, 7, 9.4], [5, 34, 5, 7.4], [2, 18, 2, 3.8]]
  19. updated CSPs Matrix: [[12, 8.4, 10.8], [12, 8.4, 8.2], [5, 3.5, 2.0]]
  20. allocation matrix: [[[3, 30, 3, 5.0], [4, 2.8, 3.1]]]

  21. updated2 Users Matrix: [[7, 24, 7, 13.6], [7, 41, 7, 9.4], [5, 34, 5, 7.4], [2, 18, 2, 3.8]]
  22. updated2 CSPs Matrix: [[12, 8.4, 10.8], [12, 8.4, 8.2], [5, 3.5, 2.0]]
  23. user 2 suitCSPs: [[4, 2.8, 3.1]]
  24. fitness: 2.417
  25. suitable group: [[2.417, [5, 34, 5, 7.4], [4, 2.8, 3.1]]]

  26. minindex: 0
  27. dealusercsp [[5, 34, 5, 7.4], [4, 2.8, 3.1]]

  28. Users Matrix: [[7, 24, 7, 13.6], [7, 41, 7, 9.4], [5, 34, 5, 7.4], [2, 18, 2, 3.8]]
  29. CSPs Matrix: [[12, 8.4, 10.8], [12, 8.4, 8.2], [5, 3.5, 2.0]]

  30. Traceback (most recent call last):
  31.   File "C:/Users/KING/PycharmProjects/originauction/temp.py", line 62, in <module>
  32.     main()
  33.   File "C:/Users/KING/PycharmProjects/originauction/temp.py", line 58, in main
  34.     allocation(Users, CSPs)
  35.   File "C:/Users/KING/PycharmProjects/originauction/temp.py", line 44, in allocation
  36.     CSPs.remove(C[minindex][2])
  37. ValueError: list.remove(x): x not in list

  38. Process finished with exit code 1
复制代码


111.PNG (63.78 KB, 下载次数: 1)
 楼主| 发表于 2018-7-13 21:29:12 | 显示全部楼层
不要求详解改代码,给我一点思路就可以了
发表于 2018-7-13 22:04:49 来自手机 | 显示全部楼层
因为你第一次把那个子列表加入到一个列表 T,第二次虽然没有匹配到项,但是在 if T 那里为真然后进入到条件体里,然后删除这个项就报错了,不知道是不是这样?
 楼主| 发表于 2018-7-13 23:16:59 | 显示全部楼层
本帖最后由 流量之神 于 2018-7-13 23:20 编辑
xyxc0673 发表于 2018-7-13 22:04
因为你第一次把那个子列表加入到一个列表 T,第二次虽然没有匹配到项,但是在 if T 那里为真然后进入到条件 ...


感谢感谢。我试下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-12-14 16:09 , Processed in 0.067562 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表