本文将为您提供关于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循环)
- For循环中的Python列表
- for循环中的Python循环计数器
- for循环中的Python过滤器函数
- 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列表
我是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循环计数器
在下面的示例代码中,是否真的需要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过滤器函数
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(赋初值;判断条件;赋值加减){
//自己的逻辑
}
1.省略第一个参数
2.省略第二个参数
3.省略第三个参数
结论:
1.第一个参数必须要定义,不然编译失败
2.第二个参数可以不写,因为没用终止条件所以无限循环下去
3.第三个也可以不写,也是无限循环,但是输出的永远是零
今天关于Python Lambda不记得for循环中的参数和python lambda for循环的介绍到此结束,谢谢您的阅读,有关For循环中的Python列表、for循环中的Python循环计数器、for循环中的Python过滤器函数、for循环中的参数能不省略等更多相关知识的信息可以在本站进行查询。
本文标签: