鱼C论坛

 找回密码
 立即注册
查看: 2733|回复: 12

列表的索引

[复制链接]
发表于 2015-3-21 11:39:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 戴宇轩 于 2015-3-21 12:45 编辑

对于一个列表[[1, 2, 7, 6], [2, 3, 8, 7], [3, 4, 9, 8], [4, 5, 10, 9], [6, 7, 12, 11], [7, 8, 13, 12], [8, 9, 14, 13], [9, 10, 15, 14], [11, 12, 17, 16], [12, 13, 18, 17], [13, 14, 19, 18], [14, 15, 20, 19], [16, 17, 22, 21], [17, 18, 23, 22], [18, 19, 24, 23], [19, 20, 25, 24]],需要找到列表中的两两列表的相同元素,并且要得到相同元素的索引位置。
  1. E = [[1, 2, 7, 6], [2, 3, 8, 7], [3, 4, 9, 8], [4, 5, 10, 9], [6, 7, 12, 11], [7, 8, 13, 12], [8, 9, 14, 13], [9, 10, 15, 14], [11, 12, 17, 16], [12, 13, 18, 17], [13, 14, 19, 18], [14, 15, 20, 19], [16, 17, 22, 21], [17, 18, 23, 22], [18, 19, 24, 23], [19, 20, 25, 24]]
  2. def func(n): # n为E中列表的个数
  3.         for i in range(n):
  4.                 for j in range(i + 1, n):
  5.                         b = [val for val in E[i] if val in E[j]] # 比较列表E[i]和E[j]得到相同的元素(即交集)
  6.                         if len(b) == 2:
  7.                                 print(b) # 将得到的相同元素字长为2的列表
复制代码
结果是:
  1. [2, 7]
  2. [7, 6]
  3. [3, 8]
  4. [8, 7]
  5. [4, 9]
  6. [9, 8]
  7. [10, 9]
  8. [7, 12]
  9. [12, 11]
  10. [8, 13]
  11. [13, 12]
  12. [9, 14]
  13. [14, 13]
  14. [15, 14]
  15. [12, 17]
  16. [17, 16]
  17. [13, 18]
  18. [18, 17]
  19. [14, 19]
  20. [19, 18]
  21. [20, 19]
  22. [17, 22]
  23. [18, 23]
  24. [19, 24]
复制代码

我需要怎么才能得到这些列表分别在列表E的位置,同时将这些位置存储在一个新的列表中。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-3-21 13:52:28 | 显示全部楼层
没看懂。。。问题能不能再详细一点?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-21 14:35:42 | 显示全部楼层
  1. E = [[1, 2, 7, 6], [2, 3, 8, 7], [3, 4, 9, 8], [4, 5, 10, 9], [6, 7, 12, 11], [7, 8, 13, 12], [8, 9, 14, 13], [9, 10, 15, 14], [11, 12, 17, 16], [12, 13, 18, 17], [13, 14, 19, 18], [14, 15, 20, 19], [16, 17, 22, 21], [17, 18, 23, 22], [18, 19, 24, 23], [19, 20, 25, 24]]
  2. #答案一
  3. new_e_list=[]
  4. for list_number in range(len(E)-1):
  5.     for index in range(len(E[list_number])):
  6.         if E[list_number][index] in E[list_number+1]:
  7.             new_element=[list_number,index,E[list_number][index]]
  8.             new_e_list.append(new_element)
  9.         
  10. print(new_e_list)
  11. #答案二
  12. def func(n):
  13.     for list_number in range(n-1):
  14.         for index in range(len(E[list_number])):
  15.             if E[list_number][index] in E[list_number+1]:
  16.                 new_element=[list_number,index,E[list_number][index]]#第一位是在哪个小列表里,第二位是在小列表里的位置,的三位是元素
  17.                 new_e_list.append(new_element)
  18.     return new_e_list
  19. ans=func(16)
  20. print(ans)
  21. #答案三
  22. def func(n):
  23.     dic={}
  24.     for list_number in range(n-1):
  25.         element=[]
  26.         for index in range(len(E[list_number])):
  27.             if E[list_number][index] in E[list_number+1]:
  28.                 element.append(E[list_number][index])
  29.             dic[list_number]=element
  30.     return dic
  31. get=func(16)
  32. print(get)


  33. #结果
  34. [[0, 1, 2], [0, 2, 7], [1, 1, 3], [1, 2, 8], [2, 1, 4], [2, 2, 9], [4, 1, 7], [4, 2, 12], [5, 1, 8], [5, 2, 13], [6, 1, 9], [6, 2, 14], [8, 1, 12], [8, 2, 17], [9, 1, 13], [9, 2, 18], [10, 1, 14], [10, 2, 19], [12, 1, 17], [12, 2, 22], [13, 1, 18], [13, 2, 23], [14, 1, 19], [14, 2, 24]]
  35. [[0, 1, 2], [0, 2, 7], [1, 1, 3], [1, 2, 8], [2, 1, 4], [2, 2, 9], [4, 1, 7], [4, 2, 12], [5, 1, 8], [5, 2, 13], [6, 1, 9], [6, 2, 14], [8, 1, 12], [8, 2, 17], [9, 1, 13], [9, 2, 18], [10, 1, 14], [10, 2, 19], [12, 1, 17], [12, 2, 22], [13, 1, 18], [13, 2, 23], [14, 1, 19], [14, 2, 24], [0, 1, 2], [0, 2, 7], [1, 1, 3], [1, 2, 8], [2, 1, 4], [2, 2, 9], [4, 1, 7], [4, 2, 12], [5, 1, 8], [5, 2, 13], [6, 1, 9], [6, 2, 14], [8, 1, 12], [8, 2, 17], [9, 1, 13], [9, 2, 18], [10, 1, 14], [10, 2, 19], [12, 1, 17], [12, 2, 22], [13, 1, 18], [13, 2, 23], [14, 1, 19], [14, 2, 24]]
  36. {0: [2, 7], 1: [3, 8], 2: [4, 9], 3: [], 4: [7, 12], 5: [8, 13], 6: [9, 14], 7: [], 8: [12, 17], 9: [13, 18], 10: [14, 19], 11: [], 12: [17, 22], 13: [18, 23], 14: [19, 24]}
复制代码

评分

参与人数 1荣誉 +10 鱼币 +10 收起 理由
~风介~ + 10 + 10 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-21 19:52:24 | 显示全部楼层
戴宇轩 发表于 2015-3-21 13:52
没看懂。。。问题能不能再详细一点?

E = [[1, 2, 7, 6], [2, 3, 8, 7], [3, 4, 9, 8], [4, 5, 10, 9], [6, 7, 12, 11], [7, 8, 13, 12], [8, 9, 14, 13], [9, 10, 15, 14], [11, 12, 17, 16], [12, 13, 18, 17], [13, 14, 19, 18], [14, 15, 20, 19], [16, 17, 22, 21], [17, 18, 23, 22], [18, 19, 24, 23], [19, 20, 25, 24]]
通过上面的程序,我得到了E中的两两数组的交集,然后呢输出了字长为2的列表。
[2, 7]
[7, 6]
[3, 8]
[8, 7]
[4, 9]
[9, 8]
[10, 9]
[7, 12]
[12, 11]
[8, 13]
[13, 12]
[9, 14]
[14, 13]
[15, 14]
[12, 17]
[17, 16]
[13, 18]
[18, 17]
[14, 19]
[19, 18]
[20, 19]
[17, 22]
[18, 23]
[19, 24]
我现在想得到这些字长为2的列表分别在列表E的具体位置。比如说第一个[2,7]的位置为[E[0][1],E[0][2],E[1][0],E[1][3]],我想得到这些交集所在的位置。不知道我这么描述你是否听懂?谢谢你的解答。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-21 19:55:00 | 显示全部楼层

非常感谢你的解答。但是呢我想得到的是这样子的,比如说第一个[2,7]的位置为[E[0][1],E[0][2],E[1][0],E[1][3]],我想得到这些交集所在的位置。这可有办法?谢谢。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-21 20:40:43 | 显示全部楼层
  1. E = [[1, 2, 7, 6], [2, 3, 8, 7], [3, 4, 9, 8], [4, 5, 10, 9], [6, 7, 12, 11], [7, 8, 13, 12], [8, 9, 14, 13], [9, 10, 15, 14], [11, 12, 17, 16], [12, 13, 18, 17], [13, 14, 19, 18], [14, 15, 20, 19], [16, 17, 22, 21], [17, 18, 23, 22], [18, 19, 24, 23], [19, 20, 25, 24]]
  2. def func(n): # n为E中列表的个数
  3.         for i in range(n):
  4.                 for j in range(i + 1, n):
  5.                         b = [val for val in E[i] if val in E[j]] # 比较列表E[i]和E[j]得到相同的元素(即交集)
  6.                         if len(b) == 2:                                
  7.                                 print(b,end = '---> ') # 将得到的相同元素字长为2的列表
  8.                                 print('E',(i,E[i].index(b[0])), sep = '', end = '')
  9.                                 print('E',(i,E[i].index(b[1])), sep = '', end = '')
  10.                                 print('E',(j,E[j].index(b[0])), sep = '', end = '')
  11.                                 print('E',(j,E[j].index(b[1])), sep = '')
复制代码

评分

参与人数 1鱼币 +3 收起 理由
WWCZHC + 3 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-3-22 08:04:26 | 显示全部楼层
不知道是否符合要求
  1. E = [[1, 2, 7, 6], [2, 3, 8, 7], [3, 4, 9, 8], [4, 5, 10, 9], [6, 7, 12, 11], [7, 8, 13, 12], [8, 9, 14, 13], [9, 10, 15, 14], [11, 12, 17, 16], [12, 13, 18, 17], [13, 14, 19, 18], [14, 15, 20, 19], [16, 17, 22, 21], [17, 18, 23, 22], [18, 19, 24, 23], [19, 20, 25, 24]]
  2. temp = []
  3. def func(n):
  4.     for i in range(n):
  5.         for j in range(i + 1, n):
  6.             b = [val for val in E[i] if val in E[j]]
  7.             if len(b) == 2:
  8.                 temp.append(b)
  9. ########## 这上面是你的代码, 结果在temp里
  10. result = []
  11. for i in temp:
  12.     t = [[]]
  13.     for j in i:
  14.         for (x, k) in enumerate(E):
  15.             for (y, l) in enumerate(k):
  16.                 t[-1].append([x, y])
  17.     result.append(t)
  18. print(result)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-23 09:59:38 | 显示全部楼层

你好 我运行了程序,报错了。
  File "weizhi.py", line 9
    print(b,end = '--->') # ���õ�����ͬԪ���ֳ�Ϊ2���б�
                ^
SyntaxError: invalid syntax
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-23 10:59:20 | 显示全部楼层
xiangjibang 发表于 2015-3-23 09:59
你好 我运行了程序,报错了。
  File "weizhi.py", line 9
    print(b,end = '--->') # �&#655 ...
  1. >>> func(len(E))
  2. [2, 7]---> E(0, 1)E(0, 2)E(1, 0)E(1, 3)
  3. [7, 6]---> E(0, 2)E(0, 3)E(4, 1)E(4, 0)
  4. [3, 8]---> E(1, 1)E(1, 2)E(2, 0)E(2, 3)
  5. [8, 7]---> E(1, 2)E(1, 3)E(5, 1)E(5, 0)
  6. [4, 9]---> E(2, 1)E(2, 2)E(3, 0)E(3, 3)
  7. [9, 8]---> E(2, 2)E(2, 3)E(6, 1)E(6, 0)
  8. [10, 9]---> E(3, 2)E(3, 3)E(7, 1)E(7, 0)
  9. [7, 12]---> E(4, 1)E(4, 2)E(5, 0)E(5, 3)
  10. [12, 11]---> E(4, 2)E(4, 3)E(8, 1)E(8, 0)
  11. [8, 13]---> E(5, 1)E(5, 2)E(6, 0)E(6, 3)
  12. [13, 12]---> E(5, 2)E(5, 3)E(9, 1)E(9, 0)
  13. [9, 14]---> E(6, 1)E(6, 2)E(7, 0)E(7, 3)
  14. [14, 13]---> E(6, 2)E(6, 3)E(10, 1)E(10, 0)
  15. [15, 14]---> E(7, 2)E(7, 3)E(11, 1)E(11, 0)
  16. [12, 17]---> E(8, 1)E(8, 2)E(9, 0)E(9, 3)
  17. [17, 16]---> E(8, 2)E(8, 3)E(12, 1)E(12, 0)
  18. [13, 18]---> E(9, 1)E(9, 2)E(10, 0)E(10, 3)
  19. [18, 17]---> E(9, 2)E(9, 3)E(13, 1)E(13, 0)
  20. [14, 19]---> E(10, 1)E(10, 2)E(11, 0)E(11, 3)
  21. [19, 18]---> E(10, 2)E(10, 3)E(14, 1)E(14, 0)
  22. [20, 19]---> E(11, 2)E(11, 3)E(15, 1)E(15, 0)
  23. [17, 22]---> E(12, 1)E(12, 2)E(13, 0)E(13, 3)
  24. [18, 23]---> E(13, 1)E(13, 2)E(14, 0)E(14, 3)
  25. [19, 24]---> E(14, 1)E(14, 2)E(15, 0)E(15, 3)
  26. >>>
复制代码


我能运行啊,我python版本是3.4.2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-23 12:44:28 | 显示全部楼层
挥舞乾坤 发表于 2015-3-23 10:59
我能运行啊,我python版本是3.4.2

我的是2.7的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-23 17:10:10 | 显示全部楼层
:dizzy:看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-14 06:30:02 | 显示全部楼层
挣鱼币啊挣鱼币
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-14 06:31:21 | 显示全部楼层
挣鱼币啊挣鱼币
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-15 07:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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