鱼C论坛

 找回密码
 立即注册
查看: 1041|回复: 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

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

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

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

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

while all_sets:
    s = all_sets.pop()
    if any(s.issubset(x) for x in all_sets):
        continue
    elif any(s.issubset(y) for y in new_sets):
        continue
    else:
        new_sets.append(s)

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

print("OK!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

while all_sets:
    s = all_sets.pop()
    if any(s.issubset(x) for x in all_sets):
        continue
    elif any(s.issubset(y) for y in new_sets):
        continue
    else:
        new_sets.append(s)

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

print("OK!")
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> 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 ...

把你数据发一下
想知道小甲鱼最近在做啥?请访问 -> 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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这是乱码吗?截个图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-2 19:57:34 From FishC Mobile | 显示全部楼层
原来是你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

在英语上实现的这里也没事,图片是我的数据,一个逗号隔开一个词
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

哈哈哈,我也一回想 发现是你了 我发了个帖子,不然一直麻烦您
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

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

while all_sets:
    s = all_sets.pop()
    if any(s.issubset(x) for x in all_sets):
        continue
    elif any(s.issubset(y) for y in new_sets):
        continue
    else:
        new_sets.append(s)

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

print("OK!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 17:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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