小编kru*_*kin的帖子

为什么最小(非贪婪)匹配受字符串字符"$"结尾的影响?

编辑:删除原始示例,因为它激起了辅助答案.还固定了标题.

问题是为什么正则表达式中存在"$"会影响表达式的贪婪:

这是一个更简单的例子:

>>> import re
>>> str = "baaaaaaaa"
>>> m = re.search(r"a+$", str)
>>> m.group()
'aaaaaaaa'
>>> m = re.search(r"a+?$", str)
>>> m.group()
'aaaaaaaa'
Run Code Online (Sandbox Code Playgroud)

"?" 似乎什么都不做.注意当"$"被删除时,然后"?" 受到尊重:

>>> m = re.search(r"a+?", str)
>>> m.group()
'a'
Run Code Online (Sandbox Code Playgroud)

编辑:换句话说,"a +?$"匹配所有a而不是最后一个,这不是我的预期.这是正则表达式"+?"的描述 来自python docs:"添加'?' 在限定符之后,它以非贪婪或最小的方式执行匹配;尽可能少的字符将被匹配."

在这个例子中似乎不是这样的:字符串"a"匹配正则表达式"a +?$",那么为什么字符串"baaaaaaa"上的相同正则表达式只匹配一个a(最右边)一)?

python regex non-greedy

7
推荐指数
1
解决办法
3505
查看次数

Python:测试空集交集而不创建新集

我经常发现自己想测试两个集合的交集而不使用交集的结果。

set1 = set([1,2])
set2 = set([2,3])
if(set1 & set2):
  print("Non-empty intersection")
else:
  print("Empty intersection")
Run Code Online (Sandbox Code Playgroud)

问题是创建了一个新的集合来执行此测试,这可能效率很低。

是否有一个简短的方法无需明确写出即可(如下所示)?

if(any(x in set2 for x in set1)):
  print("Non-empty intersection")
else:
  print("Empty intersection")
Run Code Online (Sandbox Code Playgroud)

python intersection set

4
推荐指数
1
解决办法
691
查看次数

如何使用stl list参数为c ++函数构建cython包装器

考虑以下简单的c ++代码。(printlist.h)

#ifndef TESTLIB_H
#define TESTLIB_H

#include <iostream>
#include <list>

void printlist(std::list<int> &);

#endif
Run Code Online (Sandbox Code Playgroud)

(printlist.c)

#include "printlist.h"

using namespace std;

void printlist(list<int> &l)
  {
  for(list<int>::const_iterator i = l.begin(); i != l.end(); i++)
  cout << *i << ' ';
  cout << endl;
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在cython中使用此代码,困难之处在于printlist需要一个stl :: list的事实。有没有办法使用“ extern”来声明它?如果不是,使用此功能的最简单方法是什么。

这是我的尝试:

(test.pyx)

 from libcpp.list cimport list

 cdef extern from "printlist.h":
         void printlist(std::list<int> &)

 cdef list[int] l = range(10)
 printlist(l)
Run Code Online (Sandbox Code Playgroud)

(setup.py)

 from distutils.core import setup
 from distutils.extension import Extension
 from Cython.Distutils import build_ext

 ext_modules = …
Run Code Online (Sandbox Code Playgroud)

c++ python stl cython

3
推荐指数
1
解决办法
5126
查看次数

引用2d列表中每个列表的第i个元素

拿一个2d列表.我想创建一个新列表,只包含每个列表中的第i个元素.做这个的最好方式是什么?

我有:

 map(lambda x: x[i], l)
Run Code Online (Sandbox Code Playgroud)

这是一个例子

 >>> i = 0
 >>> l = [[1,10],[2,20],[3,30]]
 >>> map(lambda x: x[i], l)
 [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

python map subscript

1
推荐指数
1
解决办法
1941
查看次数

标签 统计

python ×4

c++ ×1

cython ×1

intersection ×1

map ×1

non-greedy ×1

regex ×1

set ×1

stl ×1

subscript ×1