有没有办法在循环使用for循环时访问列表(或元组,或其他可迭代)的下一个或前一个元素?
l=[1,2,3]
for item in l:
if item==2:
get_previous(l,item)
Run Code Online (Sandbox Code Playgroud) 在Python中将列表迭代为对(当前,下一个)的问题中,OP有兴趣将Python列表迭代为一系列current, next对.我有同样的问题,但我想用最干净的方式在JavaScript中完成,也许使用lodash.
使用简单的for循环很容易做到这一点,但它感觉不是很优雅.
for (var i = 0; i < arr.length - 1; i++) {
var currentElement = arr[i];
var nextElement = arr[i + 1];
}
Run Code Online (Sandbox Code Playgroud)
Lodash几乎可以做到这一点:
_.forEach(_.zip(arr, _.rest(arr)), function(tuple) {
var currentElement = tuple[0];
var nextElement = tuple[1];
})
Run Code Online (Sandbox Code Playgroud)
在最后一次迭代中,这nextElement将是一个微妙的问题undefined.
当然,理想的解决方案只是一个pairwise只在必要时循环的lodash功能.
_.pairwise(arr, function(current, next) {
// do stuff
});
Run Code Online (Sandbox Code Playgroud)
是否有任何现有的库已经这样做了?或者是否有另一种很好的方法在JavaScript中进行成对迭代我还没有尝试过?
澄清:如果arr = [1, 2, 3, 4],那么我的pairwise函数将迭代如下:[1, 2], …
鉴于以下列表
a = [0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列表b,其中包含对当前值和下一个值a求和的元素.它将包含少于1的元素a.
像这样:
b = [1, 3, 5]
Run Code Online (Sandbox Code Playgroud)
(从0 + 1,1 + 2和2 + 3)
这是我尝试过的:
b = []
for i in a:
b.append(a[i + 1] - a[i])
b
Run Code Online (Sandbox Code Playgroud)
问题是我一直收到这个错误:
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)
我很确定它会发生,因为当我得到(3)的最后一个元素时,我无法将它添加到任何东西,因为这样做超出了它的值(3之后没有值添加).因此,我需要告诉代码停止在2,同时仍然参考3进行计算.
我有日期对象的字典列表:
{ "begin" :date object1, "end" : date object2 }
....
{ "begin" :date object3, "end" : date object4 }
Run Code Online (Sandbox Code Playgroud)
我希望按条件简化此列表:
if cur.end == next.begin - datetime.timedelta(seconds=1))
cur.end = next.end
delete next
Run Code Online (Sandbox Code Playgroud)
怎么做 ?
可能重复: 在Python中将列表成对循环(当前,下一个)
遍历列表时,我要打印列表中的当前项目以及列表中的下一个值。
listOfStuff = [a,b,c,d,e]
for item in listOfStuff:
print item, <nextItem>
Run Code Online (Sandbox Code Playgroud)
输出为:
a b
b c
c d
d e
Run Code Online (Sandbox Code Playgroud) 给定一个任意字符串(即,不基于模式),请说:
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
Run Code Online (Sandbox Code Playgroud)
我试图基于索引列表分区字符串.
这是我尝试过的,它确实有效:
import string
def split_at_idx(txt, idx):
new_li=[None]*2*len(idx)
new_li[0::2]=idx
new_li[1::2]=[e for e in idx]
new_li=[0]+new_li+[len(txt)]
new_li=[new_li[i:i+2] for i in range(0,len(new_li),2)]
print(new_li)
return [txt[st:end] for st, end in new_li]
print(split_at_idx(string.ascii_letters, [3,10,12,40]))
# ['abc', 'defghij', 'kl', 'mnopqrstuvwxyzABCDEFGHIJKLMN', 'OPQRSTUVWXYZ']
Run Code Online (Sandbox Code Playgroud)
拆分基于索引列表[3,10,12,40].然后需要将此列表转换为开始,结束对的列表[[0, 3], [3, 10], [10, 12], [12, 40], [40, 52]].我使用切片分配来设置平均值和赔率,然后将列表理解分组成对,并使用第二个LC来返回分区.
对于这样一个简单的函数来说,这似乎有点复杂.有没有更好/更有效/更惯用的方式来做到这一点?
我需要访问n和n+1一个列表的元素.例如,如果我的列表是[1,2,3,4,5]和我的第n个元素2,我需要列表中的下一个元素,3.
具体来说,我需要访问这些元素,以便使用它们在矩阵A中查找值
我有一个迭代遍历列表的for循环:
list = [1,2,3,4,5]
for i in list:
value = A[i,i+1] #access A[1,2], A[2,3], A[3,4], A[4,5]
Run Code Online (Sandbox Code Playgroud)
这个问题是我无法进行i+1操作来访问n+1列表中的元素.这是我第一次用Python编程,我假设元素访问与C/C++中的相同,但事实并非如此.任何帮助,将不胜感激.
到目前为止,这是我的代码:
for keys, values in CountWords.items():
val = values
print("%s: %s \t %s: %s" % (keys, val, keys, val))
Run Code Online (Sandbox Code Playgroud)
当它被打印时,它将输出该键及其值,然后在空格后输出相同的内容.我想知道的是,如果我能得到第二个%s:%s来从字典中选择下一个键和值.
我想知道是否有更多的Pythonic方法来执行以下操作:
A = some list
i = 0
j = 1
for _ in range(1, len(A)):
#some operation between A[i] and A[j]
i += 1
j += 1
Run Code Online (Sandbox Code Playgroud)
我觉得这应该/可以做得不同.想法?
编辑:因为有些人要求要求.我想要一个通用的答案.也许检查A [i],A [j]是否在某个范围之间,或者它们是否相等.或许我想做一个"涓涓细流"的元素.越普遍越好.
我正在编写一个小型NLP算法,我需要执行以下操作:
对于列表中的每个字符串x ["this", "this", "and", "that"],如果字符串x和下一个字符串相同,我想打印字符串.
python ×9
iteration ×4
list ×4
python-3.x ×3
dictionary ×2
string ×2
compare ×1
idioms ×1
javascript ×1
key-value ×1
lodash ×1
loops ×1
next ×1