2012-09-13 63 views
1

嘿,我試圖解決這個問題有一個問題:如何對列表中的每個元素執行一個操作並將結果放入Python的新列表中?

讓我們開始列出元素和空白列表。

L = [a, b, c] 
BL = [ ] 

我需要做的是在L [0]上執行任務並將結果存入BL [0]。 然後在L [1]上執行任務並將結果放入BL [1]。 然後當然與列表中的最後一個元素一樣。導致

L = [a, b, c] 
BL =[newa, newb, newc] 

我希望你明白我想弄明白。我是編程新手,我猜這可能是用for循環完成的,但我一直在收到錯誤。

好吧所以我這裏是我試過的。注意:鏈接是鏈接列表。

def blah(links): 
    html = [urlopen(links).read() for link in links] 
    print html[1] 

,我得到這個錯誤:

Traceback (most recent call last): 
File "scraper.py", line 60, in <module> 
main() 
File "scraper.py", line 51, in main 
getmail(links) 
File "scraper.py", line 34, in getmail 
html = [urlopen(links).read() for link in links] 
File "/usr/lib/python2.6/urllib.py", line 86, in urlopen 
return opener.open(url) 
File "/usr/lib/python2.6/urllib.py", line 177, in open 
fullurl = unwrap(toBytes(fullurl)) 
File "/usr/lib/python2.6/urllib.py", line 1032, in unwrap 
url = url.strip() 
AttributeError: 'list' object has no attribute 'strip' 
+0

您可以發佈您的代碼到目前爲止,您收到的錯誤? –

+2

我知道它可能看起來像是一個側面,但真正值得你花時間去瀏覽一個教程,就像[官方教程](http://docs.python.org/tutorial/)一樣。你不需要全部理解,但至少3-5章是至關重要的,它們會幫助你至少知道你可以做什麼樣的事情,從而幫助你尋找幫助。 – DSM

+4

'html = [urlopen(links).read()for link in links]':我想你的意思是'html = [urlopen(link).read()for link in links]'。想想「鏈接」是什麼,以及「urlopen(鏈接)」如何產生你看到的錯誤信息。 – DSM

回答

2

簡單,這樣做:

BL = [function(x) for x in L] 
+0

我看到你要去哪裏..也許它正在使用的功能導致了這個問題。 – moretimetocry

+0

這是最簡單的方式謝謝你丘比特這是我搞砸了語法:) – moretimetocry

1

瞭解列表內涵。

BL = [action(el) for el in L] 
0

你做一個功能,即完成所有操作,你想和使用地圖功能

def funct(a): # a here is L[i] 
    # funct code here 
    return b #b is the supposed value of BL[i] 
BL = map(funct, L) 
+0

'BL'不會是一個列表,但。 –

+2

@BlaXpirit:它將在Python 2. – DSM

+0

@DSM哦,我知道,但OP沒有指定他們使用過時的Python版本。 –

0

怎麼樣?

x = 0 
for x in range(len(L)): 
    BL.append(do_something(x)) 

不像一些答案一樣簡潔,但容易理解。

每個評論下面的瘋狂變化。

+1

這在很多方面都是錯誤的。 –

+0

@BlaXpirit請告訴我爲什麼。我也在學習。 – dwstein

+1

你向列表添加了一些東西,你不會指定給它。所以'BL.append(x)= do_something(L)'是錯的,它應該是'BL.append(do_something(x))'。 – SexyBeast

1

這裏有幾種不同的方法,當他們第一次運行時,全都假設L = ['a', 'b', 'c']BL = []

# Our function 
def magic(x): 
    return 'new' + x 

#for loop - here we loop through the elements in the list and apply 
# the function, appending the adjusted items to BL 
for item in L: 
    BL.append(magic(item)) 

# map - applies a function to every element in L. The list is so it 
# doesn't just return the iterator 
BL = list(map(magic, L)) 

# list comprehension - the pythonic way! 
BL = [magic(item) for item in L] 

有些文檔:

5

Ok SO I heres the what i tried.. Note: links is a list of links.

html = [urlopen(links).read() for link in links] 

在這裏,您已經要求Python遍歷links,使用link作爲每個元素的名稱...並且每個link,您都調用urlopen ...與links,即整個列表。想必你每次都想傳遞給定的link

0

這裏有用的工具是函數式編程。Python支持一些可以解決這個問題的高階函數。

我們想要使用的函數被稱爲map。這裏的一些答案使用map,但沒有一個完全接受功能方法。爲此,我們將使用函數式編程中使用的'lambda'來代替使用標準python'def'來創建函數。這使我們能夠在一條線上很好地解決您的問題。

要了解更多關於爲什麼lambda有用的信息,請參閱here。我們將按照以下方式解決您的問題:

r = map(lambda x: urlopen(x).read(), L) 
相關問題