Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串比较:Python_Python_String - Fatal编程技术网

字符串比较:Python

字符串比较:Python,python,string,Python,String,我有一组字符串,如下所示: 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.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
构建系统发育树,如果不是
s.split(“|”)[1]
来获取
后面的字符串部分,那么可能

s[s.index('|')+1:]
它从经过
|
的所有字符到字符串末尾获取子字符串

然而,我不认为使用上面提到的
split
是一个“非常头痛的问题”,而且可以说它更容易阅读

要转换整个列表,您可以创建一个函数来执行您希望它执行的操作,然后使用列表理解或
map

您可以使用split()方法,然后获取返回列表中的第二个字符串

_junk, myString = 'M.HpyFIX.dna|GTNAAC'.split('|')
或者,如果不想将其存储在字符串中:

'M.HpyFIX.dna|GTNAAC'.split('|')[1]

将其视为带有自定义分隔符的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']

另一个选项是
str.partition

x = "M.HpyFIX.dna|GTNAAC"
object, _, sequence = x.partition("|")
print(sequence)
# or grab the third element
print(x.partition("|")[1])

好的,不脱衣,分开怎么样?(我不明白为什么有些人不想无缘无故地使用某些函数)你希望
strip()
做什么?也许您的意思是
split()
split
将字符串转换为两部分并放入列表中。使用
ETE
工具使用这些列表是一个巨大的挑战headache@Beginner我不是Python专家,但文档中说,
strip
将只删除前导字符和尾随字符,而不会删除内部字符:此外,您的问题还不清楚:“比较”是什么意思?列表中有两个字符串吗?这样的结果会是什么样子?输出所有“相似”字符串?您应该通过提供一个预期的输出来结束您的示例(“输入”是不够的!)它抛出一个
值错误:未找到子字符串
无论如何,我在列表中有一个愚蠢的错误。它起作用了。谢谢接受回答
ls = ['M.HpyFIX.dna|GTNAAC', 'M1.HpyFXIII.dna|CCATC', 'M.HpyFVII.dna|ATTAAT']

nls = [ l.split('|')[1] for l in ls ]