鱼C论坛

 找回密码
 立即注册
查看: 2635|回复: 7

[已解决]求教一个关于Python列表的问题

[复制链接]
发表于 2017-5-9 21:17:34 | 显示全部楼层 |阅读模式

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

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

x
想写一个函数,对一个由列表组成的列表实现合并有重复元素的列表并去掉重复元素。
比如说对[[1,7],[2,5],[5,6]],输出[[1,7],[2,5,6]]...
新手求助,试了半天循环没写出来
最佳答案
2017-5-10 12:48:03
  1. >>> ls = [[1,5],[2,5],[5,6],[1,2]]
  2. >>> def fn(ls:list):
  3.         l=[set(ls[0])]
  4.         for x in ls:
  5.                 x=set(x)
  6.                 for s in l:
  7.                         if s&x: s|=x;break
  8.                 else:
  9.                         l.append(x)
  10.         return [list(x)for x in l]

  11. >>> fn(ls)
  12. [[1, 2, 5, 6]]
  13. >>> fn([[1,7],[2,5],[5,6]])
  14. [[1, 7], [2, 5, 6]]
  15. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-5-9 22:24:31 | 显示全部楼层
尝试写了一个,可能没有把所有的可能性都考虑到。
  1. import itertools
  2. list1 = [[1,7],[2,5],[5,6]]
  3. for i, j in itertools.combinations(list1, 2):
  4.     if len(set(i) & set(j)) != 0:
  5.         list1.remove(i)
  6.         list1.remove(j)
  7.         list1.append(list(set(i) | set(j)))
  8. print(list1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-10 05:47:28 | 显示全部楼层
冬雪雪冬 发表于 2017-5-9 22:24
尝试写了一个,可能没有把所有的可能性都考虑到。
  1. list1 = [[1,5],[2,5],[5,6],[1,2]]
  2.         

  3. for each1 in list1:
  4.     for each2 in list1:
  5.          if each1 != each2:
  6.              if len(set(each1) & set(each2)) != 0:
  7.                  list1.remove(each1)
  8.                  list1.remove(each2)
  9.                  list1.append(list(set(each1) | set(each2)))
  10.                  break

  11. print(list1)
复制代码


谢谢版主回答,但是我更换一下列表之后运行就会报错,然后我自己尝试写了下这个,运行结果是[[5, 6], [1, 2, 5]],这种情况是不是要写迭代?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 08:25:31 | 显示全部楼层
月汐影 发表于 2017-5-10 05:47
谢谢版主回答,但是我更换一下列表之后运行就会报错,然后我自己尝试写了下这个,运行结果是[[5, 6], ...

你把报错的列表发上来,我再看看。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 12:19:53 | 显示全部楼层
条件不足吧,如果是 [[1, 2], [3, 4], [2, 3]] 处理后是 [[1, 2, 3, 4]]还是其他的?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 12:48:03 | 显示全部楼层    本楼为最佳答案   
  1. >>> ls = [[1,5],[2,5],[5,6],[1,2]]
  2. >>> def fn(ls:list):
  3.         l=[set(ls[0])]
  4.         for x in ls:
  5.                 x=set(x)
  6.                 for s in l:
  7.                         if s&x: s|=x;break
  8.                 else:
  9.                         l.append(x)
  10.         return [list(x)for x in l]

  11. >>> fn(ls)
  12. [[1, 2, 5, 6]]
  13. >>> fn([[1,7],[2,5],[5,6]])
  14. [[1, 7], [2, 5, 6]]
  15. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-11 00:21:52 | 显示全部楼层
wei_Y 发表于 2017-5-10 12:19
条件不足吧,如果是 [[1, 2], [3, 4], [2, 3]] 处理后是 [[1, 2, 3, 4]]还是其他的?

对,就是[[1,2,3,4]]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-11 00:22:20 | 显示全部楼层
冬雪雪冬 发表于 2017-5-10 08:25
你把报错的列表发上来,我再看看。

没有报错,但是结果不对。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-27 11:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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