我有一个数字列表,如[1,2,3,4,5...],我想计算(1+2)/2,第二,(2+3)/2第三,
(3+4)/2等等.我怎样才能做到这一点?
我想将第一个数字与第二个数字相加并除以2,然后将第二个数字与第三个相加并除以2,依此类推.
另外,我如何总结一个数字列表?
a = [1, 2, 3, 4, 5, ...]
Run Code Online (Sandbox Code Playgroud)
是吗:
b = sum(a)
print b
Run Code Online (Sandbox Code Playgroud)
得到一个号码?
这对我不起作用.
如何进行for循环或列表理解,以便每次迭代都给出两个元素?
l = [1,2,3,4,5,6]
for i,k in ???:
print str(i), '+', str(k), '=', str(i+k)
Run Code Online (Sandbox Code Playgroud)
输出:
1+2=3
3+4=7
5+6=11
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;)
我想循环检查每个项目的列表与其后面的项目.
有没有办法可以循环使用除了最后一项使用x中的所有项目?如果可以的话,我宁愿不使用索引.
注意
freespace回答了我的实际问题,这就是我接受答案的原因,但是SilentGhost回答了我应该问的问题.
为混乱道歉.
我需要一个可在序列/迭代器/生成器上迭代的滚动窗口(也称为滑动窗口).默认的Python迭代可以被认为是一种特殊情况,窗口长度为1.我目前正在使用以下代码.有没有人有更多的Pythonic,更简洁,或更有效的方法来做到这一点?
def rolling_window(seq, window_size):
it = iter(seq)
win = [it.next() for cnt in xrange(window_size)] # First window
yield win
for e in it: # Subsequent windows
win[:-1] = win[1:]
win[-1] = e
yield win
if __name__=="__main__":
for w in rolling_window(xrange(6), 3):
print w
"""Example output:
[0, 1, 2]
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
"""
Run Code Online (Sandbox Code Playgroud) 可能的重复:
在Python中迭代列表(当前,下一个)
迭代列表中的每两个元素
是否可以在Python中以下列方式迭代列表(将此代码视为伪代码)?
a = [5, 7, 11, 4, 5]
for v, w in a:
print [v, w]
Run Code Online (Sandbox Code Playgroud)
它应该产生
[5, 7]
[7, 11]
[11, 4]
[4, 5]
Run Code Online (Sandbox Code Playgroud) 给出一个清单
l = [1, 7, 3, 5]
Run Code Online (Sandbox Code Playgroud)
我想迭代所有连续列表项对(1,7), (7,3), (3,5),即
for i in xrange(len(l) - 1):
x = l[i]
y = l[i + 1]
# do something
Run Code Online (Sandbox Code Playgroud)
我想以更紧凑的方式做到这一点,比如
for x, y in someiterator(l): ...
Run Code Online (Sandbox Code Playgroud)
有没有办法使用内置的Python迭代器来做到这一点?我确定该itertools模块应该有一个解决方案,但我无法弄明白.
我无法弄清楚如何在Python生成器中展望一个元素.一看,它就消失了.
这就是我的意思:
gen = iter([1,2,3])
next_value = gen.next() # okay, I looked forward and see that next_value = 1
# but now:
list(gen) # is [2, 3] -- the first value is gone!
Run Code Online (Sandbox Code Playgroud)
这是一个更实际的例子:
gen = element_generator()
if gen.next_value() == 'STOP':
quit_application()
else:
process(gen.next())
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我写一个发电机,你可以看一个元素前进吗?
人们常常在SO的python问题中找到这种类型的表达式.要么只是访问iterable的所有项目
for i in range(len(a)):
print(a[i])
Run Code Online (Sandbox Code Playgroud)
这只是一种繁琐的写作方式:
for e in a:
print(e)
Run Code Online (Sandbox Code Playgroud)
或者为了分配可迭代的元素:
for i in range(len(a)):
a[i] = a[i] * 2
Run Code Online (Sandbox Code Playgroud)
哪个应该是相同的:
for i, e in enumerate(a):
a[i] = e * 2
# Or if it isn't too expensive to create a new iterable
a = [e * 2 for e in a]
Run Code Online (Sandbox Code Playgroud)
或者对索引进行过滤:
for i in range(len(a)):
if i % 2 == 1: continue
print(a[i])
Run Code Online (Sandbox Code Playgroud)
可以这样表达:
for e in a [::2]:
print(e)
Run Code Online (Sandbox Code Playgroud)
或者当您只需要列表的长度而不是其内容时:
for _ in range(len(a)):
doSomethingUnrelatedToA() …Run Code Online (Sandbox Code Playgroud)