GVKun编程网logo

Python Lambda不记得for循环中的参数(python lambda for循环)

4

本文将为您提供关于PythonLambda不记得for循环中的参数的详细介绍,我们还将为您解释pythonlambdafor循环的相关知识,同时,我们还将为您提供关于For循环中的Python列表、f

本文将为您提供关于Python Lambda不记得for循环中的参数的详细介绍,我们还将为您解释python lambda for循环的相关知识,同时,我们还将为您提供关于For循环中的Python列表、for循环中的Python循环计数器、for循环中的Python过滤器函数、for循环中的参数能不省略的实用信息。

本文目录一览:

Python Lambda不记得for循环中的参数(python lambda for循环)

Python Lambda不记得for循环中的参数(python lambda for循环)

我正在使用python并尝试找出lambda函数遇到的问题。

从以下代码中,我期望创建两个lambda函数,每个函数获得不同的x,输出应为
1 2

但是输出是2 2

为什么?我该如何做两个不同的功能?使用def?

def main():    d = {}    for x in [1,2]:        d[x] = lambda : print(x)    d[1]()    d[2]()if __name__ == ''__main__'':    main()

答案1

小编典典

lambda您代码中的主体引用了名称x。与该名称关联的值在循环的下一次迭代中更改,因此,当调用lambda并解析名称时,它将获得新值。

为了获得预期的结果x,请将循环中的值绑定到的参数,lambda然后引用该参数,如下所示:

def main():    d = {}    for x in [1,2]:        d[x] = lambda x=x: print(x)    d[1]()    d[2]()if __name__ == ''__main__'':    main()>>> 12

For循环中的Python列表

For循环中的Python列表

我是Python的新手,并且有一个关于使用for循环更新列表的问题。这是我的代码:

urls = [''http://www.city-data.com/city/javascript:l("Abbott");'' , ''http://www.city-data.com/city/javascript:l("Abernathy");'' ,''http://www.city-data.com/city/Abilene-Texas.html'' ,''http://www.city-data.com/city/javascript:l("Abram-Perezville");'' ,''http://www.city-data.com/city/javascript:l("Ackerly");'' , ''http://www.city-data.com/city/javascript:l("Adamsville");'',''http://www.city-data.com/city/Addison-Texas.html'']for url in urls:    if "javascript" in url:        print url        url = url.replace(''javascript:l("'','''').replace(''");'',''-Texas.html'')        print urlfor url in urls:    if "javascript" in url:        url = url.replace(''javascript:l("'','''').replace(''");'',''-Texas.html'')print "\n"  print urls

我使用了第一个for循环来检查语法是否正确,并且工作正常。但是第二个for循环是我要使用的代码,但是无法正常工作。如何使用第二个for循环全局更新列表,以便可以在for循环外打印或存储更新的列表?

答案1

小编典典

您可以使用其索引更新列表项:

for i, url in enumerate(urls):    if "javascript" in url:        urls[i] = url.replace(''javascript:l("'','''').replace(''");'',''-Texas.html'')

另一种选择是使用列表理解:

def my_replace(s):    return s.replace(''javascript:l("'','''').replace(''");'',''-Texas.html'')urls[:] = [my_replace(url) if "javascript" in url else url for url in urls]

urls[:]意味着用urls列表理解创建的新列表替换列表的所有项目。

您的代码无法正常工作的原因是,您正在将变量分配给url其他对象,并且将对象的引用之一更改为指向其他对象不会影响其他引用。因此,您的代码等效于:

>>> lis = [''aa'', ''bb'', ''cc'']>>> url = lis[0]                   #create new reference to ''aa''>>> url = lis[0].replace(''a'', ''d'') #now assign url to a new string that was returned by `lis[0].replace`>>> url ''dd''>>> lis[0]''aa''

还要注意,str.replace总是返回一个新的字符串副本,它永远不会更改原始字符串,因为字符串在Python中是不可变的。如果lis[0]是列表,并且您使用.append.extend等对它执行了任何就地操作,那么这也将影响原始列表。

for循环中的Python循环计数器

for循环中的Python循环计数器

在下面的示例代码中,是否真的需要counter =
0,还是有更好,更多的Python方法来访问循环计数器?我看到了一些与循环计数器有关的PEP,但它们要么被延迟要么被拒绝(PEP
212
PEP
281
)。

这是我的问题的简化示例。在我的实际应用程序中,这是通过图形完成的,整个菜单必须每帧重新绘制一次。但这以易于复制的简单文本方式进行了演示。

也许我还应该补充一点,我正在使用Python 2.5,尽管我仍然对是否有特定于2.6或更高版本的方法感兴趣。

# Draw all the options,but highlight the selected index
def draw_menu(options,selected_index):
    counter = 0
    for option in options:
        if counter == selected_index:
            print " [*] %s" % option
        else:
            print " [ ] %s" % option
        counter += 1


options = ['Option 0','Option 1','Option 2','Option 3']

draw_menu(option,2) # Draw menu with "Option2" selected

运行时,它输出:

 [ ] Option 0
 [ ] Option 1
 [*] Option 2
 [ ] Option 3

for循环中的Python过滤器函数

for循环中的Python过滤器函数

filter 返回一个生成器,这就是为什么在将生成器传递给 list() 后才获得列表的原因,filter() 获取所有生成的元素并在列表中返回它们。

无需 for 和使用 nums = list(range(1,15)) result = [x for x in nums for i n range(2,5) if x % i == 0] 即可获得所需内容的方法:

df_log['time:timestamp'] = datetime.strptime(df_log['time:timestamp'],'%Y-%m-%d.%H:%M:%S')

这被称为列表推导式,它是构建这样的列表的非常有效且易读的方式。

,

过滤器是生成器。因此它使用表达式的惰性求值。 来自documentation:

当为生成器对象调用 __next__() 方法时,生成器表达式中使用的变量会被惰性求值(与普通生成器的方式相同)。

这意味着当您调用 list(nums) 时会计算 lambda 表达式,因为它在后台调用了 __next__() 方法。

所以在你的第二个例子中,它(我猜)总是用分隔符 4 过滤 3 次:

nums = filter(lambda x: x % 4 == 0)
nums = filter(lambda x: x % 4 == 0)
nums = filter(lambda x: x % 4 == 0)

也许那段代码能让你更好地理解。请注意,在调用 list() 时会计算表达式。如您所见,此处的循环不会改变结果。使用变量 i 会有所不同:

nums = list(range(1,15))
i = 2
nums = filter(lambda x: x % i == 0,nums)
i = 3
nums = filter(lambda x: x % i == 0,nums)
i = 4
nums = filter(lambda x: x % i == 0,nums)
print(list(nums)) # here i==4
### [4,8,12]

nums = list(range(1,50))
for i in range(2,5):
   nums = filter(lambda x: x % i == 0,nums)
i = 11
print(list(nums)) # here i==11
### [11,22,33,44]

另一种解决方案:

def f(x):
   for i in range(2,5):
      if x % i != 0:
         return False
   return True

nums = list(range(1,15))
nums = filter(f,nums)
print(list(nums))

for循环中的参数能不省略

for循环中的参数能不省略

for循环语法:

for(赋初值;判断条件;赋值加减){

//自己的逻辑

}

1.省略第一个参数

2.省略第二个参数

3.省略第三个参数

结论:

1.第一个参数必须要定义,不然编译失败

2.第二个参数可以不写,因为没用终止条件所以无限循环下去

3.第三个也可以不写,也是无限循环,但是输出的永远是零

今天关于Python Lambda不记得for循环中的参数python lambda for循环的介绍到此结束,谢谢您的阅读,有关For循环中的Python列表、for循环中的Python循环计数器、for循环中的Python过滤器函数、for循环中的参数能不省略等更多相关知识的信息可以在本站进行查询。

本文标签: