4

ねえ、私はこれを理解しようとして問題を抱えています:

要素を含むリストと空白のリストから始めましょう。

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'
4

7 に答える 7

7

簡単に、これを行います:

BL = [function(x) for x in L]
于 2012-09-13T20:35:35.553 に答える
5

わかりましたので、私が試したことをここに示します。注: リンクはリンクのリストです。

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

ここで、各要素の名前としてlinksを使用して を反復処理するように Python に指示しました...そして、各 を使用して...を呼び出します。つまり、リスト全体です。おそらく、毎回与えられたものを渡したいと思っていました。linklinkurlopenlinkslink

于 2012-09-13T20:53:54.967 に答える
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]

いくつかのドキュメント:

于 2012-09-13T20:47:20.757 に答える
1

リスト内包表記について学びます。

BL = [action(el) for el in L]
于 2012-09-13T20:35:28.067 に答える
0

どうですか?

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

一部の回答ほど簡潔ではありませんが、理解しやすいです。

以下のコメントによる狂った変更。

于 2012-09-13T20:42:11.963 に答える
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)
于 2012-09-13T20:36:08.260 に答える
0

ここで役立つツールは、関数型プログラミングです。Python は、この問題を解決できるいくつかの高階関数をサポートしています。

特に使用したい関数はmapと呼ばれます。ここでの回答のいくつかはマップを使用していますが、機能的なアプローチを完全に取り入れているものはありません。そのために、標準の python 'def' を使用して関数を作成する代わりに、関数型プログラミングで使用される 'lambda' を使用します。これにより、問題を 1 行でうまく解決できます。

ラムダが便利な理由の詳細については、こちらを参照してください。私たちはあなたの問題を次のように解決します:

r = map(lambda x: urlopen(x).read(), L)
于 2015-06-19T14:10:26.520 に答える