Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中识别字符串中的增量模式_Python_String_Increment - Fatal编程技术网

如何在Python中识别字符串中的增量模式

如何在Python中识别字符串中的增量模式,python,string,increment,Python,String,Increment,我有一个单列数据框,其中包含随机生成的字符。 我希望编写一些代码,可以识别是否有任何字符遵循某种增量模式。 例如: 其中一些数字明显增加,例如120和121 还有21、22和23 我如何有效地识别这种增量? 棘手的是,这种模式可能出现在字符串的任何部分。尝试以下方法: df['nums']=df.yourcolumn.apply(lambda x: [int(i) for i in re.findall(r'\d+', x)]) df['text']=df.yourcolumn.apply(l

我有一个单列数据框,其中包含随机生成的字符。 我希望编写一些代码,可以识别是否有任何字符遵循某种增量模式。 例如:

其中一些数字明显增加,例如
120
121
还有
21
22
23

我如何有效地识别这种增量? 棘手的是,这种模式可能出现在字符串的任何部分。

尝试以下方法:

df['nums']=df.yourcolumn.apply(lambda x: [int(i) for i in re.findall(r'\d+', x)])

df['text']=df.yourcolumn.apply(lambda x: ''.join(k for k in x if not k.isdigit()))

d={}
for i in set(df.text):
    dftemp=df[df.text==i]
    ltemp=[(k, z) for k,z in zip(dftemp.index, dftemp.nums)]
    for p in itertools.combinations(ltemp, 2):
        if any(x>y for x in p[0][1] for y in p[1][1]):
            d[(p[0][0], p[1][0])]=(p[0][1], p[1][1])
这将生成一个包含所有行对和相应数字的字典,其中数字有增量。应用于您的数据,它会给出以下结果:

{(0, 1): ([120, 21], [121, 22]), (0, 4): ([120, 21], [122, 23]), (1, 4): ([121, 22], [122, 23])}

这表示行(0,1)(0,4)和(1,4)之间存在增量。

要在每个字符串内或整个列上搜索增量吗?那么数字的长度呢?例如,数字12本身可以被视为增量(1-->2),我想在整列中查找增量。至于数字,我将数字视为捆绑在一起的数字的组合。所以如果有121,我不会把它当作12。然后你可以循环你的列,把所有的数字保存在一个列表中,然后检查那个里的增量。您需要一个函数或正则表达式来提取单独的数字。在这里检查这些函数:数字相当多,我希望避免为此编写循环。我曾半心半意地希望这是可行的,使用集合或类似的东西,你关心行还是它们不重要?我的意思是,你是否注意到增量发生在哪里?(从第3行到第5行等等)?很好,这很有效!我已经开始实际分离这些数字,但我把它们放在一起。你的方式将它们分开,这样比较起来就容易多了。谢谢
{(0, 1): ([120, 21], [121, 22]), (0, 4): ([120, 21], [122, 23]), (1, 4): ([121, 22], [122, 23])}