在Python中,如何减去两个非唯一的无序列表?假设我们有a = [0,1,2,1,0]和b = [0, 1, 1]我想这样做c = a - b,并有c成为[2, 0]或[0, 2]顺序并不重要,对我来说.如果a不包含b中的所有元素,则应抛出异常.
请注意,这与套装不同!我对找到a和b中元素集的区别不感兴趣,我对a和b中元素的实际集合之间的差异感兴趣.
我可以用for循环来做这个,在a中查找b的第一个元素,然后从a中删除元素,然后从a中删除等等.但这对我没有吸引力,它会非常低效(O(n^2)时间顺序)虽然及时做到这一点应该没问题O(n log n).
迁移无疑比仅仅启动phpMyAdmin和更改架构更好(就像我在php时期所做的那样),但在使用它们一段时间后,我认为它们存在致命缺陷.
版本控制是一个已解决的问题.迁移的主要功能是保留数据库更改的历史记录.但是为每次更改存储不同的文件是一种笨拙的方式来跟踪它们.如果post.rb要添加新的虚拟属性,则不要创建新版本(或表示增量的文件) - 当您要添加新的非虚拟属性时,为什么要创建新的迁移?
换句话说,就像检查post.rb版本控制一样,为什么不检查schema.rb到版本控制并直接对文件进行更改?
这在功能上与为每个delta保留文件相同,但使用起来要容易得多.我的心理模型是"我希望表X有这样的列(或者我真的希望模型X具有这样的属性)" - 为什么你必须从这里推断如何从现有的模式中获得; 只是打开schema.rb并给表X正确的列!
但即使是类包装表的想法也是一个实现细节!为什么我不能打开post.rb并说:
Class Post
t.string :title
t.text :body
end
Run Code Online (Sandbox Code Playgroud)
如果你使用这样的模型,你必须决定如何处理现有数据.但即便如此,迁移也是过度的 - 当您迁移数据时,当您使用迁移down方法时,您将失去保真度.
无论如何,我的问题是,即使你想不出一个更好的方法,也不是有点粗略的迁移?
说我有以下代码.
def foo():
foobar = None
if foobar is not None:
raise foobar
Run Code Online (Sandbox Code Playgroud)
当我通过pylint运行此代码时,我收到以下错误:
E0702:4:foo: Raising NoneType while only classes, instances or string are allowed
Run Code Online (Sandbox Code Playgroud)
这是pylint中的错误吗?我的幽灵太老了吗?
pylint 0.18.0,
astng 0.19.1, common 0.45.0
Python 2.5.1 (r251:54863, Aug 25 2008, 09:23:26)
Run Code Online (Sandbox Code Playgroud)
注意:我知道这段代码没有任何意义,它已被提炼到其裸露的骨头以暴露手头的问题,通常情况发生在第2行和第3行之间,这可能使foobar不是None,而且我不能只是在那里引发异常,因为这发生在另一个对它有限制的线程中.
我使用下面的代码来记录一个地图,当它只包含零时速度很快,但只要地图中有实际数据,它就会变得难以忍受地慢......有没有办法更快地做到这一点?
log_file = open('testfile', 'w')
for i, x in ((i, start + i * interval) for i in range(length)):
log_file.write('%-5d %8.3f %13g %13g %13g %13g %13g %13g\n' % (i, x,
map[0][i], map[1][i], map[2][i], map[3][i], map[4][i], map[5][i]))
Run Code Online (Sandbox Code Playgroud) CAShapeLayer使用CGPathRef来绘制它的东西.所以我有一条星路,我想要一个半径约为15个单位的平滑投影.可能在一些新的iPhone OS版本中有一些不错的功能,但我需要自己做一个旧版本的3.0(大多数人仍然使用).
我试图做一些非常令人讨厌的事情:我创建了一个for循环并按顺序创建了15个这样的路径,逐步变换缩放它们变得更大.然后将它们分配给新创建的CAShapeLayer,并在每次迭代时稍微降低它的alpha值.不仅这个缩放在数学上是不正确的并且很糟糕(它应该相对于轮廓发生!),阴影不是圆形的并且看起来非常难看.这就是为什么柔和的阴影具有半径.
在15个单位的阴影大小之后,恒星的尖端不应该显得非常尖锐.它们应该像奶油一样柔软.但是在我丑陋的解决方案中,它们就像恒星本身一样竖琴,因为我所做的只是将恒星缩放15次并将其降低15次.丑陋.
我想知道大家伙是怎么做到的?如果你有一个任意路径,并且该路径必须抛出阴影,那么算法如何工作呢?可能必须将路径扩展30次,相对于远离填充部分的轮廓的切线逐点扩展,并且仅需0.5个单位即可进行良好的混合.
在我重新发明轮子之前,也许有人有一个方便的例子或链接?
在matlab中,可以使用matlab save()调用将matlab对象甚至整个工作区写入文件.我想拦截字节流并在它转到文件之前对其进行后处理,这可能吗?或者,是否可以指定写入字节流的filedescriptor而不是通常作为参数进入save()调用的文件名.
请注意,我不是在寻找另一种在matlab中编写文件的方法,我知道我可以fopen()一个文件并编写我想要的任何内容,但重点是我想(重新)使用对象序列化保存电话内部,不再发明我自己的.
load()调用当然会出现一个模拟问题,但在这种情况下,在进入反序列化过程之前拦截字节流,但我想如果save()可能会出现load()问题的解决方案.自然.
一些澄清:
我不是在寻找一种新的方法来序列化matlab数据,它已经存在并且练习的重点是在save()调用中使用现有的序列化,以便1)我不需要开始更新序列化新版本的matlab中的新类型对象的代码,或者天堂禁止人们开始使用自定义OOP对象,以及2)我仍然可以轻松地使用现有代码来读取mat文件,例如scipy对mat文件的支持.
流不得在后处理之前转到文件或任何内容,这个想法是加密安全性,将流明文写入文件完全破坏了该目的.
并发症:
似乎savematlab中函数中使用的功能不仅仅是常规顺序写入.检查库的目标代码似乎是使用matPutVariable(以前称为matPutArray)实现save函数,它将类型mxArray*out 的给定变量写入MATFile*open 类型的文件matOpen.这里的问题是以下描述中的文字matPutVariable:
如果
mxArrayMAT文件中不存在,则该函数将其追加到末尾.如果mxArray文件中存在同名,则该函数通过重写文件替换现有mxArray的newmxArray.
这意味着该matPutVariable函数必须通过该文件进行搜索,显然在使用管道时将无法进行搜索,因此在使用此现有序列化功能时,无法使用管道来实现对字节流的处理.
在matlab中,可以使用dbstack在当前时间检索调用堆栈,但dbstack在matlab程序的独立编译版本中不可用,是否有获取调用堆栈的替代方法,或者至少调用当前函数的函数?我想编写一个设备函数,需要知道它被调用的人,但最好是一个完整的调用栈.
下面的代码位是从字符中提取ASCII代码.当我在普通的ASCII区域中转换字符时,我得到了我期望的值.当我从扩展区域转换£和€时,我得到一个1的填充INT,我正在存储该字符.
例如,以下的输出是:
45(ascii E如预期)FFFFFF80(按预期延长ascii€但用垫填充)
这不是一个问题,但我只是想知道为什么会这样.这是代码......
unsigned int asciichar[3];
string cTextToEncode = "E€";
for (unsigned int i = 0; i < cTextToEncode.length(); i++)
{
asciichar[i] = (unsigned int)cTextToEncode[i];
cout << hex << asciichar[i] << "\n";
}
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么会这样?谢谢
我在列表中有一条记录
>>> bob =['bob smith',42,30000,'software']
Run Code Online (Sandbox Code Playgroud)
我试图从这个记录中得到'史密斯'的姓氏
我使用以下命令:
>>> bob[0].split()[1]
Run Code Online (Sandbox Code Playgroud)
它为我提供'史密斯'
但我所指的那本书使用以下命令:
>>> bob[0].split()[-1]
Run Code Online (Sandbox Code Playgroud)
它也给了我同样的结果'史密斯'
为什么索引[1]和[-1]提供相同的结果?