久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

迭代列表的 n 個連續元素(重疊)

Iterate over n successive elements of list (with overlapping)(迭代列表的 n 個連續元素(重疊))
本文介紹了迭代列表的 n 個連續元素(重疊)的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

itertools python 模塊為迭代器實現了一些基本構建塊.正如他們所說,它們形成了一個迭代器代數".我期待,但我找不到使用該模塊進行以下迭代的簡潔方法.給定一個有序實數列表,例如

The itertools python module implements some basic building blocks for iterators. As they say, "they form an iterator algebra". I was expecting, but I could not find a succinctly way of doing the following iteration using the module. Given a list of ordered real numbers, for example

a = [1.0,1.5,2.0,2.5,3.0]

...返回一個新列表(或只是迭代)按一些 n 值分組,比如 2

... return a new list (or just iterate) grouping by some n value, say 2

b = [(1.0,1.5),(1.5,2.0),(2.0,2.5),(2.5,3.0)]

我發現這樣做的方法如下.首先將列表一分為二,帶有偶數和賠率索引:

The way I found of doing this was as follows. First split the list in two, with evens and odds indexes:

even, odds = a[::2], a[1::2]

然后構造新列表:

b = [(even, odd) for even, odd in zip(evens, odds)]
b = sorted(b + [(odd, even) for even, odd in zip(evens[1:], odds)])

本質上,它類似于移動均值.

In essence, it is similar to a moving mean.

是否有簡潔的方法(使用或不使用 itertools)?

PS:

應用程序

a 列表想象為實驗期間發生的某些事件的時間戳集:

Imagine the a list as the set of timestamps of some events occurred during an experiment:

timestamp       event
47.8            1a
60.5            1b
67.4            2a
74.5            2b
78.5            1a
82.2            1b
89.5            2a
95.3            2b
101.7           1a
110.2           1b
121.9           2a
127.1           2b

...

此代碼用于根據不同的時間窗口對這些事件進行分段.現在我對 2 連續事件之間的數據感興趣;'n > 2' 僅用于探索目的.

This code is being used to segment those events in accord with different temporal windows. Right now I am interested in the data between 2 successive events; 'n > 2' would be used only for exploratory purposes.

推薦答案

對于2,你可以這樣做

b = zip(a, a[1:])  # or list(zip(...)) on Python 3 if you really want a list

對于固定的 n,技術類似:

For fixed n, the technique is similar:

# n = 4
b = zip(a, a[1:], a[2:], a[3:])

對于變量 n,您可以壓縮可變數量的切片,或者(尤其是當窗口大小接近 a 的大小時)您可以使用切片直接獲取窗口:

For variable n, you could zip a variable number of slices, or (especially if the window size is close to the size of a) you could use slicing to take windows directly:

b = zip(*[a[i:] for i in xrange(n)])
# or
b = [tuple(a[i:i+n]) for i in xrange(len(a)-n+1)]

如果 a 不是列表,您可以從 itertools 文檔中概括 pairwise 配方:

If a is not a list, you could generalize the pairwise recipe from the itertools docs:

import copy
import itertools

def nwise(iterable, n):
    # Make n tees at successive positions along the iterable.
    tees = list(itertools.tee(iterable, 1))
    for _ in xrange(n-1):
        tees.append(copy.copy(tees[-1]))
        next(tees[-1])

    return zip(*tees)

這篇關于迭代列表的 n 個連續元素(重疊)的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

How to draw a rectangle around a region of interest in python(如何在python中的感興趣區域周圍繪制一個矩形)
How can I detect and track people using OpenCV?(如何使用 OpenCV 檢測和跟蹤人員?)
How to apply threshold within multiple rectangular bounding boxes in an image?(如何在圖像的多個矩形邊界框中應用閾值?)
How can I download a specific part of Coco Dataset?(如何下載 Coco Dataset 的特定部分?)
Detect image orientation angle based on text direction(根據文本方向檢測圖像方向角度)
Detect centre and angle of rectangles in an image using Opencv(使用 Opencv 檢測圖像中矩形的中心和角度)
主站蜘蛛池模板: 免费的黄色小视频 | 操操av | 亚洲激情一区二区 | 欧美一级淫片免费视频魅影视频 | 一区二区三区在线免费 | 国产精品美女久久 | 91亚洲国产成人久久精品麻豆 | 在线播放亚洲 | 国产美女在线播放 | 在线视频黄 | 在线观看免费黄色 | 国产成人精品亚洲男人的天堂 | 可以在线观看的av | 国产天天操 | 天天射一射 | 国产成人小视频 | 欧美亚洲一区 | 精品久久久久久久久久 | 国产一级网站 | 日韩视频精品 | 免费特级毛片 | www.精品| 日韩中文字幕在线播放 | 国产一区不卡 | 欧美性精品 | 国产三级一区 | 日韩av网站在线观看 | 人成在线 | 亚洲一区免费 | 毛片视频网站 | 欧美日韩一区在线 | 亚洲 欧美 激情 另类 校园 | 人人爱人人草 | 免费视频久久久 | 91精品91久久久中77777 | 国产乱人乱偷精品视频 | av网站在线免费观看 | 精品一区二区三区四区五区 | 日韩精品免费在线观看 | 日韩城人免费 | 国产99热|