- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
给定目标('b', 'a')
和输入:
x0 = ('b', 'a', 'z', 'z')
x1 = ('b', 'a', 'z', 'z')
x2 = ('z', 'z', 'a', 'a')
x3 = ('z', 'b', 'a', 'a')
('b', 'a')
元素的位置并获取输出:
>>> find_ba(x0)
0
>>> find_ba(x1)
0
>>> find_ba(x2)
None
>>> find_ba(x3)
1
pairwise
配方:
from itertools import tee
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
def find_ba(x, target=('b', 'a')):
try:
return next(i for i, pair in enumerate(pairwise(x)) if pair == target)
except StopIteration:
return None
Are your elements in lists or types (as shown) or in a generator (e.g. reading from a file handle)?
Can you say about how many lists you have to search and about how long they are? That would help for suggesting a search strategy.
最佳答案
最快的常规搜索算法将具有O(n)
的平均性能(称为线性搜索),这意味着除了处理每个元素外,您别无选择(可能除了恒定因素外)。
鉴于您的问题:
Is there a way to finding index of pairwise elements without looping all the characters?
O(n)
):
from itertools import count
def find_ab(tup):
for idx in count(start=1, step=2):
try:
if tup[idx] == 'b':
if tup[idx+1] == 'a':
return idx
elif tup[idx] == 'a':
if tup[idx-1] == 'b':
return idx-1
except IndexError:
break
'b'
或
'a'
的奇数索引项目跳过一个项目。
log(n)
项,但是它需要对序列进行排序。您的示例未进行排序,因此对它们进行排序将需要
O(n*log(n))
操作-不仅将每个项目处理一次,还将多次处理其中一些项目。并不是说我知道一种明智的方式来对相邻元素进行排序。
dict
)没有意义,因为要创建该结构,您需要处理每个元素。
O(n)
),然后再在
O(1)
中进行许多搜索:
d = {}
for idx, pair in enumerate(pairwise(x0)):
if pair not in d: # keep only the first index for each pair
d[pair] = idx
>>> d.get(('b', 'a'), None)
0
O(n)
线性搜索O(log(n))
二进制搜索(用于排序的数据)O(1)
查找(用于仅在某些“存储桶”中搜索的可哈希查找或其他搜索问题)iteration_utilities.successive
1。最后我检查了它的速度,大约比该食谱快1.5至2倍。即使您不更改方法并接受需要在最坏的情况下处理所有(或几乎所有)元素的方法,它可能也会更快!dict
(此后可以进行O(1)
查找)。有时,如果可以某种方式提取信息,最好查看生成/下载/获取数据集的过程。pairwise
-recipe),并且即使输入很长,它的工作速度也应该非常快。对于包含一百万个'z'
的元组,在我的计算机上仅需要200毫秒。因此,您每秒可以处理几百万个元素(即使在像我这样的旧的慢速计算机上)。对于大数据来说,这可能还不够快,但是纯python并不是处理大数据的好语言(通常,您需要编写C扩展名,使用Cython或某些NumPy,Pandas或派生方法)。同样,生成器上的next
函数是惰性的(假设您在python2上使用itertools.izip
而不是zip
),因此您只处理每个元组,直到找到匹配项为止。dict
)。 关于python - 查找成对元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43629864/
我有 X 个值通过 CSV 传递到表中 - 因此我将 99315,99316,99223 并将它们拆分到单列临时表中 - CSV 中的每个值都放入一行。 我需要做的是获得成对的值的每个排列 -所以 -
我已经看到了几个关于如何生成数组中元素的所有可能组合的类似问题。但是我很难弄清楚如何编写一个只输出对组合的算法。任何建议将不胜感激! 从以下数组开始(有 N 个元素): var array = ["a
基本上我想做这样的查询: SELECT * FROM `table` WHERE (`c1`,`c2`) in (('a','b'),('c','d')) 我尝试了一些方法,但找不到任何关于如何实现的
我声明了一个 vector 对: vector > args; 然后我想像这样将一对插入 vector : args.push_back((1,-1)); 它告诉我逗号的左边操作数没有作用。我哪里出
我正在用给定的对填充 vector 的邻接列表: vector> adj[1000]; 我正在对列表进行深度优先搜索,但遇到了一些奇怪的行为。第一个 print 语句打印一些值,这意味着我在 adj[
这个问题Mysql Select some random rows and plus one specific row非常接近我想要的,只是我不知道如何将 ORDER BY 应用于我的情况。 当有人接
我在字符串向量中有大量文本(大约 700.000 个字符串)。我正在尝试替换语料库中的特定单词/短语。也就是说,我有一个包含 app 40.000 个短语的向量和一个相应的替换向量。 我正在寻找解决问
我正在寻找一种方法来找到第 2 组(对)的集群。 有没有一种简单的方法可以做到这一点? 想象一下,我有某种数据想要匹配 x和 y , 喜欢 library(cluster) set.seed(1) d
我必须正确编码 5 个 XML 保留字符(& "和 '),如下所示: "&", "&" "", ">" "\"", """ "\'", "'" 我可以一一做,
我正在处理我的作品集。我在正文中有图像我希望图像应该只使用 css/css3/Jquery 对 Angular 线而不是通过 photoshop 编辑我已经尝试对正文使用变换旋转。 但我没有得到结果。
我带着类似的问题又回来了。是否有可以返回其特定合作伙伴的数据类型?例如: ExampleType test = new ExampleType(); test.put("hello","hi"); 如
我正在对我的数据运行事后 Tukey HSD,该数据有 10 个因子级别。该表很大,我希望在成对的表中向读者展示 p 值,将 45 行表留给附录。 这是一个示例数据集: set.seed(42) x
我正在对我的数据运行事后 Tukey HSD,该数据有 10 个因子级别。该表很大,我希望在成对的表中向读者展示 p 值,将 45 行表留给附录。 这是一个示例数据集: set.seed(42) x
我想根据 std::pair 的 std::vector 找到 std::lower_bound second 元素与 lambda。 std::vector > vec; vec.resize(5
得到这个简单的python代码,和re.compile实例一样匹配。我注意到,即使我使用的是完全相同的值,它也会创建两个实例,并相应地重复它们。 我想知道是否有人可以说出这种行为的原因, 为什么要创建
首先,我是 C++ 的新手,所以我可能不得不深入研究伪代码和/或 Python 来解释我正在尝试做的事情... 我正在尝试为动画的每一帧存储多个 Sprite 的 X 和 Y 坐标对。我设想这类似于以
test1和test2在内存中的布局是否相同? std::vector > test1; std::vector test2; 其中 mystruct 定义为: struct mystru
我有这个代码: std::vector> vec; vec.emplace_back("a", 1); //success vec.emplace(vec.end(), "b", 2); //comp
跟进 this question ,我正在尝试制作箱线图和成对比较以再次显示显着性水平(仅针对重要的成对),但这次我有超过 2 个组要比较和更复杂的方面。 我将在此处使用 iris 数据集进行说明。检
我有一个 vector 对,如下所示。第一对值未排序,第二对值已排序(从零开始)。我可能想通过实现 std::vector 和 std::pair 来存储数据。当我有第一对值(未排序)时,找到相应的第
我是一名优秀的程序员,十分优秀!