楼主: 不二不幸福
4720 1

[问答] 怎么删除满足条件的行 [推广有奖]

  • 0关注
  • 1粉丝

硕士生

33%

还不是VIP/贵宾

-

威望
0
论坛币
161 个
通用积分
2.8500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1641 点
帖子
76
精华
0
在线时间
160 小时
注册时间
2017-9-26
最后登录
2024-6-14

楼主
不二不幸福 发表于 2018-6-22 11:04:57 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
现在数据格式如下(每一列以Tab键分隔):
12 GAGACGAT        TGAAGACG 10520277 10520428
23 TGAAGACG        GAGACGAT 10520277 10520428
11 GAAGGAAG        ATCCAGAG 10525674 10525756
22 GAAGGAAG        ATCCAGAG 10525756 10525674
33 TCGCTGTT        TTCCAAGG 10525992 10525964
11 TTCCAAGG        TCGCTGTT 10525992 10525964
12 CGGCTAAT        GTCGAAGA 10546542 10546594
23 CGGCTAAT        GTCGAAGA 10546542 10546594
15 GCTATCCT        GTGCCATA 10549955 10550024
21 GCTATCCT        GTGCCATA 10550024 10549955
21 ATCCAGAG        GAAGGAAG 10562789 10562916
56 ATCCAGAG        GAAGGAAG 10562916 10562789

脚本的目的是如果存在两行,其第2、3列值刚好相反,且第4、5列值相同,则只输出其中一行(如上述第一二行),或者如果2、3、4、5列值相等,也只输出其中一行,所以上述结果应该为:
12 GAGACGAT        TGAAGACG 10520277 10520428
11 GAAGGAAG        ATCCAGAG 10525674 10525756
22 GAAGGAAG        ATCCAGAG 10525756 10525674

33 TCGCTGTT        TTCCAAGG 10525992 10525964
23 CGGCTAAT        GTCGAAGA 10546542 10546594
15 GCTATCCT        GTGCCATA 10549955 10550024
21 GCTATCCT        GTGCCATA 10550024 10549955
21 ATCCAGAG        GAAGGAAG 10562789 10562916
56 ATCCAGAG        GAAGGAAG 10562916 10562789


我的想法是这个文件打开两次,然后内外两个for循环,一行一行的比较,再用个if语句,如果满足这个条件就在其中一个文件中删除这行,但是网上查了一下,好像没有删除这一说?本来想着用continue跳过本次循环,但是本该删除的行在下次循环中可能就被留下来了,请问还有没有其它办法啊?
for s1 in r1:
    for s2 in r2:
        if(R1_UMI1==R2_UMI2 and R2_UMI1==R1_UMI2 and s1.pos==s2.pos and s1.pnext==s2.pnext):
            continue
        else:
            outfile.write(s2)

而且,我的数据是一个二进制文件,只能用pysam这个库打开,所以是不能用pandas把它当成数据框之类的来处理,所以如果就用一般的循环该怎么改?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


沙发
y3534365 发表于 2018-6-22 15:00:15
我用单纯使用列表的方法试了一下,你试试行不行
  1. str = """12 GAGACGAT        TGAAGACG 10520277 10520428
  2. 23 TGAAGACG        GAGACGAT 10520277 10520428
  3. 11 GAAGGAAG        ATCCAGAG 10525674 10525756
  4. 22 GAAGGAAG        ATCCAGAG 10525756 10525674
  5. 33 TCGCTGTT        TTCCAAGG 10525992 10525964
  6. 11 TTCCAAGG        TCGCTGTT 10525992 10525964
  7. 12 CGGCTAAT        GTCGAAGA 10546542 10546594
  8. 23 CGGCTAAT        GTCGAAGA 10546542 10546594
  9. 15 GCTATCCT        GTGCCATA 10549955 10550024
  10. 21 GCTATCCT        GTGCCATA 10550024 10549955
  11. 21 ATCCAGAG        GAAGGAAG 10562789 10562916
  12. 56 ATCCAGAG        GAAGGAAG 10562916 10562789"""

  13. list1 = str.splitlines()

  14. list2 = []
  15. for i in list1:
  16.     b = i.replace("        "," ")
  17.     list2.append(b.split(" "))


  18. list3 = []
  19. for index,i in enumerate(list2):
  20.     for index_1,j in enumerate(list2):
  21.         if index != index_1:
  22.             if j[1] == i[2] and j[2] == i[1] and j[3] == i[3] and j[4] == i[4]:  
  23.                 list3.append(i)
  24.                 list2.pop(index_1)
  25.             elif j[1] == i[1] and j[2] == i[2] and j[3] == i[3] and j[4] == i[4]:
  26.                 list3.append(i)
  27.                 list2.pop(index_1)
  28.             

  29. list3
复制代码


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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-21 21:01