2013-01-17 28 views
1
>>> str(NC_000117.1_01) in str(NC_000117.1_01_173_001_001) 
    File "<stdin>", line 1 
    str(NC_000117.1_01) in str(NC_000117.1_01_173_001_001) 
       ^
SyntaxError: invalid syntax 

我需要查看包含下划线的名称,但是当我尝试将名称转换为字符串时,Python会引发语法错误。我测试了几个字符串和下划线总是会导致错误。下划线造成Python中字符串函数的问题

如果我直接用引号测试它的工作原理,但我有我需要测试的名称列表。

“NC_000117.1_01” 中的 “NC_000117.1_01_173_001_001”

True 

任何想法,为什么功能不工作?

+0

“但我有名字,我需要测试的名单。” ... 什么?你为什么认为这些字符串与这个字符串有什么不同? –

回答

2

python看到NC_000117.1_01并认为NC_000117是一个变量名,其属性为1_01。但是,1_01不是有效的identifier。具体来说,请注意标识符不能以数字开头。

>>> 1foo = 12 
    File "<stdin>", line 1 
    1foo = 12 
    ^
SyntaxError: invalid syntax 

可能是因为那样的事情,如1将是不明确的。它是一个常量整数还是它可以分配给的标识符?

请注意,它是导致SyntaxError的数字,而不是下划线。

>>> str(NC._1_01) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'NC' is not defined 

在这里,语法是正确的,因为我得到一个NameError而不是。


也许你打算做这样的事情:

str('NC_000117.1_01') in str('NC_000117.1_01_173_001_001') 

这是因为同一件事:

'NC_000117.1_01' in 'NC_000117.1_01_173_001_001' 

这是同样的事情True

或者,也许你需要一个循环:

list_of_strings = ['NC_000117.1_01',...] 
for s in list_of_strings: 
    if s in 'NC_000117.1_01_173_001_001': 
     do_something(s) 
+0

嗯,我是从一个SQL数据库中调用名称来创建列表,但我现在才发现,如果我将sql调用定义为字符串,因为我将它放入列表中,它就像我想要的字符串列表一样出来。尽管谢谢你的信息! – user1933192