鱼C论坛

 找回密码
 立即注册
查看: 1165|回复: 10

[已解决]实现 对比列表内容 的求助

[复制链接]
发表于 2021-12-2 15:37:46 | 显示全部楼层 |阅读模式

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

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

x
我有A.txt和B.txt,每个txt包含了一百多个近义词集合,一行一个集合,部分示例如下:

A.txt
{1,2,3,4}
{5,6}
{7,8,9}

B.txt
{6,5}
{9,8}

具体问题:两个文件包含了一些同样的数据,我想去除它:例如,上个数据中{5,6}、{6,5}同样,就留下一个;
               {7,8,9}、{9,8}这两个就留下{7,8,9}因为内容多。

结果生成C.txt,内容如下:
{1,2,3,4}
{5,6}
{7,8,9}

需要您的帮助,期待回复,谢谢哒....
最佳答案
2021-12-2 20:24:06
本帖最后由 qq1151985918 于 2021-12-2 20:41 编辑
Amgalang 发表于 2021-12-2 19:51
因为是小语种所以发出去会出现 乱码:
您先以英语字母尝试吧,谢谢
A.txt

  1. fun = lambda x: str({i.strip() for i in x.split(",")})

  2. with open("A.txt", "r", encoding="utf-8") as f:
  3.     setsA = list(map(fun, f.readlines()))

  4. with open("B.txt", "r", encoding="utf-8") as g:
  5.     setsB = list(map(fun, g.readlines()))

  6. all_sets = [eval(s) for s in set(setsA + setsB) if s]
  7. new_sets = []

  8. while all_sets:
  9.     s = all_sets.pop()
  10.     if any(s.issubset(x) for x in all_sets):
  11.         continue
  12.     elif any(s.issubset(y) for y in new_sets):
  13.         continue
  14.     else:
  15.         new_sets.append(s)

  16. with open("C.txt", "w", encoding="utf-8") as h:
  17.     h.write("\n".join(map(str, new_sets)))

  18. print("OK!")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-2 16:22:55 | 显示全部楼层
  1. with open("A.txt", "r", encoding="utf-8") as f:
  2.     setsA = f.readlines()

  3. with open("B.txt", "r", encoding="utf-8") as g:
  4.     setsB = g.readlines()

  5. all_sets = [eval(s) for s in setsA + setsB if s]
  6. new_sets = []

  7. while all_sets:
  8.     s = all_sets.pop()
  9.     if any(s.issubset(x) for x in all_sets):
  10.         continue
  11.     elif any(s.issubset(y) for y in new_sets):
  12.         continue
  13.     else:
  14.         new_sets.append(s)

  15. with open("C.txt", "w", encoding="utf-8") as h:
  16.     h.write("\n".join(map(str, new_sets)))

  17. print("OK!")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-2 19:42:21 | 显示全部楼层

我的数据是词,目前报错了,有点看不懂:
line 7, in <listcomp>
    all_sets = [eval(s) for s in setsA + setsB if s]
  File "<string>", line 1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-2 19:47:01 From FishC Mobile | 显示全部楼层
Amgalang 发表于 2021-12-2 19:42
我的数据是词,目前报错了,有点看不懂:
line 7, in
    all_sets = [eval(s) for s in setsA + sets ...

把你数据发一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-2 19:51:41 | 显示全部楼层

因为是小语种所以发出去会出现 乱码:
您先以英语字母尝试吧,谢谢
A.txt
A,B,C,D
E,F
G,H,I

B.txt
F,E
H,I

我的原始数据(我发出去试一试):
A.txt
&#6189;&#6180;&#6191;&#6195;&#6180; &#6192;&#6176;&#6190;&#6176;&#6195;&#6176;&#6192;&#6180; &#6146; &#6189;&#6180;&#6191;&#6195;&#6180; &#6192;&#6178;&#6199;&#6188;&#6177;&#6189;
&#6188;&#6180;&#6192;&#6188;&#6178;&#6184;&#6176;&#6188; &#6180;&#6199;&#6186;&#6176;&#6189;&#6155;&#6180; &#6146; &#6196;&#6176;&#6189;&#6176;&#6184; &#6190;&#6178;&#6188;&#6158;&#6176;
&#6188;&#6182;&#6188;&#6177;&#6188;&#6177; &#6192;&#6176;&#6199;&#6158;&#6176; &#6146; &#6191;&#6176; &#6192;&#6176;&#6199;&#6158;&#6176;

B.txt
&#6188;&#6182;&#6188;&#6177;&#6188;&#6177; &#6192;&#6176;&#6199;&#6158;&#6176; &#6146; &#6191;&#6176; &#6192;&#6176;&#6199;&#6158;&#6176;&#6146; &#6191;&#6176;
&#6189;&#6180;&#6191;&#6195;&#6180; &#6192;&#6178;&#6199;&#6188;&#6177;&#6189; &#6146; &#6189;&#6180;&#6191;&#6195;&#6180; &#6192;&#6176;&#6190;&#6176;&#6195;&#6176;&#6192;&#6180;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-2 19:52:30 From FishC Mobile | 显示全部楼层
Amgalang 发表于 2021-12-2 19:51
因为是小语种所以发出去会出现 乱码:
您先以英语字母尝试吧,谢谢
A.txt

这是乱码吗?截个图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-2 19:55:21 | 显示全部楼层
qq1151985918 发表于 2021-12-2 19:52
这是乱码吗?截个图

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

使用道具 举报

发表于 2021-12-2 19:57:34 From FishC Mobile | 显示全部楼层
原来是你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-2 19:58:35 | 显示全部楼层

在英语上实现的这里也没事,图片是我的数据,一个逗号隔开一个词
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-2 20:02:30 | 显示全部楼层

哈哈哈,我也一回想 发现是你了 我发了个帖子,不然一直麻烦您
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-2 20:24:06 | 显示全部楼层    本楼为最佳答案   
本帖最后由 qq1151985918 于 2021-12-2 20:41 编辑
Amgalang 发表于 2021-12-2 19:51
因为是小语种所以发出去会出现 乱码:
您先以英语字母尝试吧,谢谢
A.txt

  1. fun = lambda x: str({i.strip() for i in x.split(",")})

  2. with open("A.txt", "r", encoding="utf-8") as f:
  3.     setsA = list(map(fun, f.readlines()))

  4. with open("B.txt", "r", encoding="utf-8") as g:
  5.     setsB = list(map(fun, g.readlines()))

  6. all_sets = [eval(s) for s in set(setsA + setsB) if s]
  7. new_sets = []

  8. while all_sets:
  9.     s = all_sets.pop()
  10.     if any(s.issubset(x) for x in all_sets):
  11.         continue
  12.     elif any(s.issubset(y) for y in new_sets):
  13.         continue
  14.     else:
  15.         new_sets.append(s)

  16. with open("C.txt", "w", encoding="utf-8") as h:
  17.     h.write("\n".join(map(str, new_sets)))

  18. print("OK!")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 23:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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