簡體   English   中英

Python:為什么列表導入使用引號,如何避免/擺脫它們?

[英]Python: Why does list import using quotation marks, how can I avoid this/get rid of them?

這里的問題非常簡單,但困擾我足夠長的時間來問。 代碼如下所示:

f4 = open("genomekey2.txt", 'rb')
keyline = f4.readline()
keygenomes = []
for keyline in f4:
   keygenomes.append(keyline[:-1])

genomekey2.txt 文件格式如下所示

['Prochlorococcus marinus str. MIT 9202']
['Prochlorococcus marinus str. NATL1A']
['Synechococcus sp. RS9917']
['Nostoc sp. PCC 7120']
['Synechococcus sp. JA-2-3B'a(2-13)']

問題是當我打印基因組密鑰列表時,它包含我想要的所有條目,但在列表中找到的每個 [ ] 周圍都有引號。 我想去掉引號,這樣我就可以將它與另一個列表進行比較,但到目前為止還沒有找到辦法。 我試過...

for a in keygenomes:
    a.replace('"', '')

但這似乎沒有用。 我寧願一個解決方案,它根本不添加引號。 它們到底有什么用,代碼的哪一部分(.append,.readline())負責添加它們? 這里有大量初學者問題,但你們看起來很不錯。

編輯:我最終想將它與這樣格式化的列表進行比較

[['Arthrospira maxima CS-328'], ['Prochlorococcus marinus str。 MIT 9301'], ['Synechococcus sp. CC9605'], ['Synechococcus sp. WH 5701'], ['Synechococcus sp. CB0205'], ['Prochlorococcus marinus 海峽。 MIT 9313'], ['Synechococcus sp. JA-3-3Ab'], ['紅毛霉 IMS101'], ['Synechococcus sp. PCC 7335'], ['紅毛霉 IMS101'], ...

編輯:所以我想我得到了一些答案的組合,謝謝大家的幫助,報價干擾了列表比較所以我也將它們添加到第一個列表中,即使我認為它只是模仿作為字符串輸入的列表(我現在認為我理解其中的區別)它似乎有效

f4 = open("genomekey2.txt", 'rb')
keyline = f4.readline()
keygenomes = []
for keyline in f4:
    keygenomes.append(keyline[:-1])

specieslist = " ".join(["%s" % el for el in specieslist])

nonconservedlist = [i for i in keygenomes if i not in specieslist]

編輯:是的,上面的方法有效,但在更好地理解問題后,我在這里找到了更優雅的解決方案(http://forums.devshed.com/python-programming-11/convert-string-to-list-71857.html)感謝你們的幫助是這樣的:

for keyline in f4:
    keyline = eval(keyline)
    keygenomes.append(keyline)

謝謝!

根據您想將列表與之進行比較的內容,您似乎想要一個列表列表而不是一個字符串列表……也許是這個?

f4 = open("genomekey2.txt", 'rb')
keygenomes = []
for keyline in f4.readlines():
    if keyline:
        keygenomes.append(eval(keyline.strip()))

您將遇到以下行的問題:

['Synechococcus sp. JA-2-3B'a(2-13)']

引號不正確,它會破壞評估。 是否可以混合引號? 而是像這樣...

["Synechococcus sp. JA-2-3B'a(2-13)"]

一個快速而骯臟的解決方案是跳過該行的前兩個和最后兩個字符

f4 = open("genomekey2.txt", 'rb')
keyline = f4.readline()
keygenomes = []
for keyline in f4:
   # CHANGE HERE
   keygenomes.append(keyline[2:-2])

否則使用正則表達式

g = re.match(("^\['(?P<value>.*)'\]"), "['Synechococcus sp. JA-2-3B'a(2-13)']")
g.group(1)
"Synechococcus sp. JA-2-3B'a(2-13)"

a.replace(...)返回修改后的字符串,它不會修改a

因此,您需要實際替換數組中的條目,或者在將它們放入數組之前修復它們。

keygenomes = [ a.replace('"', '') for a in keygenomes ]

編輯:

我想我沒有足夠仔細地閱讀這個問題 - 當你打印一個字符串時"出現 - 它不是字符串本身的一部分。

您的replace使用了錯誤的字符串; 您正在嘗試刪除單引號,但您的字符串是雙引號。 替換也不是就地,因為字符串是不可變的,你必須使用返回值。

keygenomes.append(keyline[:-1].replace("'", ""))

嘗試這樣的事情:

keygenomes = []
f4 = open("genomekey2.txt", 'rb')
keyline = f4.readline()
for keyline in f4:
    keyline = keyline.strip()
    if keyline and keyline.startswith("['") and keyline.endswith("']"):
        keygenomes.append(keyline[2:-2])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM