编辑:删除原始示例,因为它激起了辅助答案.还固定了标题.
问题是为什么正则表达式中存在"$"会影响表达式的贪婪:
这是一个更简单的例子:
>>> 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(最右边)一)?
我经常发现自己想测试两个集合的交集而不使用交集的结果。
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) 考虑以下简单的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) 拿一个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 ×4
c++ ×1
cython ×1
intersection ×1
map ×1
non-greedy ×1
regex ×1
set ×1
stl ×1
subscript ×1