2016-09-21 59 views
0

我想讀取一個文件,並通過split()方法從其中一列創建列表,並將此列表傳遞給另一個方法。有人可以解釋什麼是最pythonic的方式來實現?傳遞python列表tp方法

def t(fname): 
    k = [] 
    with open(fname, 'rU') as tx: 
     for line in tx: 
      lin = line.split() 
      k.append(lin[1]) 
      res = anno(k) 
      for id in res.items(): 
        if i > 0.05: 
         print(i) 

我想將'k'的元素作爲一個列表傳遞給anno()方法。但是通過這種方式,我有很多列表,但沒有一個(必填)。

回答

1

,而不是通過一個附加到列表中的一個,爲什麼你不只是爲特定的語句如環k = [(line.split())[1] for line in tx]

而不是使用with open(file) as:我已經使用tx = open(file)所以只要你有它的需要,你可以使用它並使用tx.close()關閉它,它消除了額外的intendation級別。

def t(fname): 
    k = [] 
    tx = open(fname, 'rU') 
    k = [(line.split())[1] for line in tx] 
    tx.close() 
    res = anno(k) 
    for i in res.items(): 
     if i > 0.05:print(i) 
+1

雖然這段代碼可以解決問題,[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-基於問題的答案)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – jadsq

+0

@jadsq完成。是的,我將在未來的答案中記住這一點。 – harshil9968

0

當你想創建一個新的列表,lsit內涵吃了首選方式:

def t(fname): 
with open(fname, 'rU') as tx: 
    k = [(line.split())[1] for line in tx] 
    res = anno(k) 
    for i in res.items(): 
     if i > 0.05: 
      print(i) 
+0

是否有理由使用'(line.split())[1]'而不是'line.split()[1]'? – jadsq

+0

這是爲了清晰 – proton

+0

好吧,它顯然讓我困惑...... – jadsq

0

我想你只是在嵌套時犯了一個錯誤。在for循環之外構建列表後,必須調用anno()

def t(fname): 
    k = [] 
    for line in open('fname'): 
     k.append(line.split()[1]) 
    res = anno(k)