将字符串拆分为其后缀数组的最有效方法是什么?
假设你有字符串"天气很好",我想生成一个后缀数组:
[0] = "nice"
[1] = "is nice"
[2] = "weather is nice"
[3] = "the weather is nice"
Run Code Online (Sandbox Code Playgroud)
我可以从头到尾以令牌(单词)的形式访问迭代器形式的字符串.
我正在处理一个使用多个 ManyToManyFields 的项目,但是,此时我意识到我希望 ManyToManyField 存储一些额外的值(主要是自动设置的),例如创建连接时的时间戳。我试过了,并models.ManyToManyField用我的自定义替换了参考ManyToManyField
class CustomManyToManyField(models.ManyToManyField):
date_registered = models.DateTimeField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)
然后我的模型:
class A(models.Model):
name = models.CharField(max_length=32)
class B(models.Model):
m2m = CustomManyToManyField(A)
name = models.CharField(max_length=32)
Run Code Online (Sandbox Code Playgroud)
但是,运行会python manage.py sql testapp返回以下 SQL:
BEGIN;
CREATE TABLE "testapp_a" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(32) NOT NULL
)
;
CREATE TABLE "testapp_b_m2m" (
"id" integer NOT NULL PRIMARY KEY,
"b_id" integer NOT NULL,
"a_id" integer NOT NULL REFERENCES "testapp_a" ("id"),
UNIQUE ("b_id", "a_id")
)
;
CREATE TABLE "testapp_b" …Run Code Online (Sandbox Code Playgroud) 假设我有一个完整的元组列表,表示"从"和"到"时间:
tuples = [ (0, 5), (5, 10), (10, 15), (15,20) ]
Run Code Online (Sandbox Code Playgroud)
我希望能够检索与给定元组重叠的元组列表:
searchTuple = (3,11)
result = findOverlap(tuples, searchTuple)
Run Code Online (Sandbox Code Playgroud)
此代码应返回以下列表:
[ (0, 5), (5, 10), (10, 15) ]
Run Code Online (Sandbox Code Playgroud)
而(16,22)的searchTuple应该只返回最后一个元组(15,20)
编码此检索的最有效方法是什么?我尝试了各种各样的东西,但我无法让算法正常工作.我想到了以下不同的"重叠",我有兴趣捕捉:
a) tuple_min < find_min AND tuple_max > find_max
search tuple -> | |
|----------------| the search tuple is entirely contained
b) tuple_min > find_min AND tuple_max > find_max
| |
|----------------| the left part of the tuple overlaps
c) tuple_min < find_min AND tuple_max < find_max
| |
|----------------| …Run Code Online (Sandbox Code Playgroud)