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]

在这里,您已经要求 Python 遍历links,使用link每个元素的名称...并且使用每个link,您调用urlopen... with links,即整个列表。大概你想link每次都通过一个给定的。

于 2012-09-13T20:53:54.967 回答
1

了解列表推导。

BL = [action(el) for el in L]
于 2012-09-13T20:35:28.067 回答
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 回答
0

您创建一个函数,执行您想要的所有操作并使用 map 函数

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

怎么样?

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

不像某些答案那么简洁,但对我来说很容易理解。

根据下面的评论进行疯狂的更改。

于 2012-09-13T20:42:11.963 回答
0

这里一个有用的工具是函数式编程。Python支持一些可以解决这个问题的高阶函数。

我们特别想使用的函数称为map。这里的一些答案使用地图,但没有一个完全接受功能方法。为此,我们将使用函数式编程中使用的“lambda”,而不是使用标准的 python 'def' 创建函数。这使我们能够在一行中很好地解决您的问题。

要了解有关 lambda 为何有用的更多信息,请转到此处。我们将按照以下方式解决您的问题:

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