我有一组看起来像这样的字符串:
M.HpyFIX.dna|GTNAAC
M1.HpyFXIII.dna|CCATC
M.HpyFI.dna|CAGT
M2.HpyFXIII.dna|CCATC
M.HpyFVI.dna|TGCA
M.HpyFVIII.dna|TCNNGA
M.HpyFORFX.dna|CCNNGG
M.HpyFII.dna|TCGA
M.HpyFVII.dna|ATTAAT
M.HpyFXII.dna|GTCA
M.HpyFV.dna|CCGG
M.HpyFXI.dna|CTNAG
M.HpyFIII.dna|GATC
M.HpyFIV.dna|GANTC
我想仅根据|
(管道)之后的字符串来比较它们。我不想使用string.strip('|')
。在上面的例子中,我希望逐个获取每个字符串并应用我所拥有的函数,除了M1.HpyFXIII.dna|CCATC
和M2.HpyFXIII.dna|CCATC
,我想在临时列表中进入,然后应用函数
我想使用字符串比较的原因是我使用ETE
来构建系统发育树,并且使用字符串比较更简单
答案 0 :(得分:2)
如果不是s.split('|')[1]
来获取|
之后的字符串部分,那么可能
s[s.index('|')+1:]
从|
之后的所有字符到字符串结尾处抓取子字符串。
我不会使用split
作为上面的“大头痛”,并且它可以说更容易阅读。
要转换整个列表,您可以创建一个执行您希望它执行的操作的函数,然后使用列表推导或map
。
答案 1 :(得分:0)
您可以使用split()方法,然后在返回的列表中获取第二个字符串。
_junk, myString = 'M.HpyFIX.dna|GTNAAC'.split('|')
或者如果您不想将其存储在字符串中:
'M.HpyFIX.dna|GTNAAC'.split('|')[1]
答案 2 :(得分:0)
将自定义分隔符视为csv文件
>>> import csv
>>> import collections
>>> with open('in.txt') as in_file:
... reader = csv.reader(in_file, delimiter='|')
... data = list(reader) #exhaust generator, convert it to list
... #now you have loaded your data in two-dimensional array, lets find dups
... dup_values = [x for x, y in collections.Counter([r[1] for r in data]).items() if y > 1]
... for r in data:
... if r[1] in dup_values:
... print r
...
['M1.HpyFXIII.dna', 'CCATC']
['M2.HpyFXIII.dna', 'CCATC']
答案 3 :(得分:0)
其他选项是str.partition
:
x = "M.HpyFIX.dna|GTNAAC"
object, _, sequence = x.partition("|")
print(sequence)
# or grab the third element
print(x.partition("|")[1])
答案 4 :(得分:0)
ls = ['M.HpyFIX.dna|GTNAAC', 'M1.HpyFXIII.dna|CCATC', 'M.HpyFVII.dna|ATTAAT']
nls = [ l.split('|')[1] for l in ls ]