Amgalang 发表于 2021-12-2 15:37:46

实现 对比列表内容 的求助

我有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}

需要您的帮助,期待回复,谢谢哒....

qq1151985918 发表于 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 =
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!")

Amgalang 发表于 2021-12-2 19:42:21

qq1151985918 发表于 2021-12-2 16:22


我的数据是词,目前报错了,有点看不懂:
line 7, in <listcomp>
    all_sets =
File "<string>", line 1

qq1151985918 发表于 2021-12-2 19:47:01

Amgalang 发表于 2021-12-2 19:42
我的数据是词,目前报错了,有点看不懂:
line 7, in
    all_sets =

把你数据发一下

Amgalang 发表于 2021-12-2 19:51:41

qq1151985918 发表于 2021-12-2 19:47
把你数据发一下

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

B.txt
F,E
H,I

我的原始数据(我发出去试一试):
A.txt
ᠭᠤᠯᠳᠤ ᠰᠠᠮᠠᠳᠠᠰᠤ ᠂ ᠭᠤᠯᠳᠤ ᠰᠢᠷᠬᠡᠭ
ᠬᠤᠰᠬᠢᠨᠠᠬ ᠤᠷᠪᠠᠭ᠋ᠤ ᠂ ᠴᠠᠭᠠᠨ ᠮᠢᠬ᠎ᠠ
ᠬᠦᠬᠡᠬᠡ ᠰᠠᠷ᠎ᠠ ᠂ ᠯᠠ ᠰᠠᠷ᠎ᠠ

B.txt
ᠬᠦᠬᠡᠬᠡ ᠰᠠᠷ᠎ᠠ ᠂ ᠯᠠ ᠰᠠᠷ᠎ᠠ᠂ ᠯᠠ
ᠭᠤᠯᠳᠤ ᠰᠢᠷᠬᠡᠭ ᠂ ᠭᠤᠯᠳᠤ ᠰᠠᠮᠠᠳᠠᠰᠤ

qq1151985918 发表于 2021-12-2 19:52:30

Amgalang 发表于 2021-12-2 19:51
因为是小语种所以发出去会出现 乱码:
您先以英语字母尝试吧,谢谢
A.txt


这是乱码吗?截个图

Amgalang 发表于 2021-12-2 19:55:21

qq1151985918 发表于 2021-12-2 19:52
这是乱码吗?截个图

qq1151985918 发表于 2021-12-2 19:57:34

原来是你

Amgalang 发表于 2021-12-2 19:58:35

Amgalang 发表于 2021-12-2 19:55


在英语上实现的这里也没事,图片是我的数据,一个逗号隔开一个词

Amgalang 发表于 2021-12-2 20:02:30

qq1151985918 发表于 2021-12-2 19:57
原来是你

哈哈哈,我也一回想 发现是你了 我发了个帖子,不然一直麻烦您

qq1151985918 发表于 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 =
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!")
页: [1]
查看完整版本: 实现 对比列表内容 的求助