2013-01-17 56 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