鱼C论坛

 找回密码
 立即注册
查看: 1553|回复: 3

文本处理

[复制链接]
发表于 2018-2-26 21:03:35 | 显示全部楼层 |阅读模式

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

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

x
super11337_200671      super10010_1349177    424
super11337_200671      scaffold14159_630988   387
scaffold1207_440912      scaffold1207_440912      1232
scaffold1207_440912      scaffold116128_191187    885
scaffold1207_440912      super1786_353120 856
scaffold127278_5563    super162_234394     773
scaffold127278_5563    super1207_440912    424
super10010_1349177      super11337_200671    424

如上表1,第一列为序列1,第二列为数据2,第三列为数值。
问题:如何将第一列与第二列相同的行去除且将两行中仅是第一列与第二列颠倒顺序的只保留一行。得到如下表2

super11337_200671      super10010_1349177    424
super11337_200671      scaffold14159_630988   387
scaffold1207_440912      scaffold116128_191187    885
scaffold1207_440912      super1786_353120 856
scaffold127278_5563    super162_234394     773
scaffold127278_5563    super1207_440912    424

哪位大神能否告知如何进行操作?谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-26 21:42:31 | 显示全部楼层
写了一个程序,自己不太满意,看看大家的写法。
  1. str1 = """super11337_200671      super10010_1349177    424
  2. super11337_200671      scaffold14159_630988   387
  3. scaffold1207_440912      scaffold1207_440912      1232
  4. scaffold1207_440912      scaffold116128_191187    885
  5. scaffold1207_440912      super1786_353120 856
  6. scaffold127278_5563    super162_234394     773
  7. scaffold127278_5563    super1207_440912    424
  8. super10010_1349177      super11337_200671    424"""
  9. lst1 = str1.split('\n')
  10. lst2 = [i.split() for i in lst1]
  11. i = 0
  12. while True:
  13.     try:
  14.         if lst2[i][0] == lst2[i][1]:
  15.             lst2.pop(i)
  16.         i += 1
  17.     except IndexError:
  18.         break
  19. i = 0
  20. while True:
  21.     try:
  22.         x = lst2[i][0]
  23.         y = lst2[i][1]
  24.         i += 1
  25.     except IndexError:
  26.         break
  27.     j = i + 1
  28.     while True:
  29.         try:
  30.             if x == lst2[j][1] and y == lst2[j][0]:
  31.                 lst2.pop(j)
  32.             j += 1
  33.         except IndexError:
  34.             break
  35. for i in lst2:
  36.     print(i[0], i[1], i[2])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-27 10:27:15 | 显示全部楼层
冬雪雪冬 发表于 2018-2-26 21:42
写了一个程序,自己不太满意,看看大家的写法。

谢谢,那如果是数据很多的情况呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-27 13:59:12 | 显示全部楼层
xiaoxiaonao 发表于 2018-2-27 10:27
谢谢,那如果是数据很多的情况呢?

如果3列的数据都相同,可以每行为一个元素成为集合,这样就可以去重了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-28 05:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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