对于列表["foo", "bar", "baz"]和列表中的项目"bar",如何在Python中获取其索引(1)?
显然xrange更快但我不知道为什么它更快(除了轶事到目前为止没有证据表明它更快)或者除此之外还有什么不同
for i in range(0, 20):
for i in xrange(0, 20):
Run Code Online (Sandbox Code Playgroud) 所以我可以从头开始len(collection)并结束collection[0].
编辑:对不起,我忘了提到我也希望能够访问循环索引.
在for循环遍历列表的Python 循环中,我们可以编写:
for item in list:
print item
Run Code Online (Sandbox Code Playgroud)
它整齐地遍历列表中的所有元素.有没有办法在循环中知道到目前为止我循环了多少次?例如,我想要一个列表,在我处理了十个元素后,我想用它们做一些事情.
我想到的替代方案将是这样的:
count=0
for item in list:
print item
count +=1
if count % 10 == 0:
print 'did ten'
Run Code Online (Sandbox Code Playgroud)
要么:
for count in range(0,len(list)):
print list[count]
if count % 10 == 0:
print 'did ten'
Run Code Online (Sandbox Code Playgroud)
到目前为止,是否有更好的方法(就像for item in list)获得迭代次数?
我可以发誓我已经看到了获取列表的函数(或方法),就像这样,[3, 7, 19]并使其成为可迭代的元组列表,如下所示:[(0,3), (1,7), (2,19)]使用它代替:
for i in range(len(name_of_list)):
name_of_list[i] = something
Run Code Online (Sandbox Code Playgroud)
但我不记得名称和谷歌搜索"迭代列表"什么都没有.
我想知道对for循环中的最后一个元素进行特殊处理的最佳方法(更紧凑和"pythonic"方式).有一段代码只能在元素之间调用,在最后一个元素中被抑制.
以下是我目前的工作方式:
for i, data in enumerate(data_list):
code_that_is_done_for_every_element
if i != len(data_list) - 1:
code_that_is_done_between_elements
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法?
注意:我不想使用hacks,例如使用reduce;)
我有一个包含子列表的列表.我想打印所有长度等于3的子列表.
我在python中执行以下操作:
for x in values[:]:
if len(x)==3:
print x
Run Code Online (Sandbox Code Playgroud)
values是原始列表.上面的代码是否打印了每个长度等于3的子列表x?我想只显示length==3一次的子列表.
问题已经解决了.问题出在Eclipse编辑器上.我不明白原因,但是当我运行循环时它只显示我列表的一半.
我有必要在Eclipse中更改任何设置吗?
在我下面的示例代码中,是否真的需要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
Run Code Online (Sandbox Code Playgroud)
运行时,输出:
[ ] Option 0
[ ] Option 1 …Run Code Online (Sandbox Code Playgroud) 我正在Django的一个项目中工作,我刚开始尝试扩展User模型以制作用户配置文件.
不幸的是,我遇到了一个问题:每次我尝试在模板中获取用户的配置文件时(user.get_template.lastIP例如),我都会收到以下错误:
Environment:
Request Method: GET
Request URL: http://localhost:8000/
Django Version: 1.1
Python Version: 2.6.1
Template error:
In template /path/to/base.tpl, error at line 19
Caught an exception while rendering: too many values to unpack
19 : Hello, {{user.username}} ({{ user.get_profile.rep}}). How's it goin? Logout
Exception Type: TemplateSyntaxError at /
Exception Value: Caught an exception while rendering: too many values to unpack
关于发生了什么或我做错了什么的想法?
这是很常见的,我遍历一个Python列表,让双方的内容和他们的索引.我通常做的是以下内容:
S = [1,30,20,30,2] # My list
for s, i in zip(S, range(len(S))):
# Do stuff with the content s and the index i
Run Code Online (Sandbox Code Playgroud)
我发现这个语法有点难看,尤其是zip函数内部.还有更优雅/ Pythonic的方法吗?