小编Nat*_*man的帖子

偏移指针的正确方法是什么?

我想传递一个指向函数的指针.我希望这个指针指向数组中间的某个位置.假设我有这样的数组unsigned char BufferData[5000];,下面的语句在语法上是否正确?

writeSECTOR( destAddress, (char *)( BufferData + (int)(i * 512 )) );
// destAddress is of type unsigned long
// writeSECTOR prototype: int writeSECTOR ( unsigned long a, char * p );
// i is an int
Run Code Online (Sandbox Code Playgroud)

c arrays pointers offset

9
推荐指数
3
解决办法
4万
查看次数

我可以使用VIM在Python中查看函数的doc字符串吗?

在VIM中编写Python时有没有办法查看函数的doc字符串?

例如:

def MyFunction(spam):
    """A function that foobars the spam
    returns eggs"""

    return foobar(spam).eggs()
Run Code Online (Sandbox Code Playgroud)

我希望能够键入MyFunction(spam0)并查看文档字符串,作为工具提示或状态栏或VIM允许的任何其他方式.

python vim docstring

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

仅当元素尚未存在时,将元素添加到列表的最有效方法是什么?

我在Python中有以下代码:

def point_to_index(point):
    if point not in points:
        points.append(point)
    return points.index(point)
Run Code Online (Sandbox Code Playgroud)

这段代码非常低效,特别是因为我希望points增长到拥有几百万个元素.

如果该点不在列表中,我将遍历列表3次:

  1. 寻找它,并决定它不存在
  2. 转到列表的末尾并添加一个新元素
  3. 转到列表的末尾,直到找到索引

如果在列表中,我穿越了两遍:1.寻找它,并决定它是有2去几乎到了列表的末尾,直到我找到指数

有没有更有效的方法来做到这一点?例如,我知道:

  • 我更有可能用一个不在列表中的点来调用此函数.
  • 如果该点在列表中,那么它可能比在开头时接近结尾.

所以,如果我有这条线:

if point not in points:
Run Code Online (Sandbox Code Playgroud)

从结尾到开头搜索列表,当点已经在列表中时,它将提高性能.

但是,我不想这样做:

if point not in reversed(points):
Run Code Online (Sandbox Code Playgroud)

因为我认为这reversed(points)本身会带来巨大的代价.

我也不想在列表的开头添加新的点(假设我知道如何在Python中这样做)因为这会改变索引,索引必须保持不变才能使算法工作.

我能想到的唯一改进是只使用一次传递来实现该功能,如果可能的话,从最后到开始.底线是:

  • 有没有办法做到这一点?
  • 有没有更好的方法来优化功能?

编辑:我已经得到了只用一次通过实现这个的建议.index()从最后到开始有什么办法吗?

编辑:人们已经问过为什么索引是关键的.我正在尝试使用OFF文件格式描述3D表面.此格式使用其顶点和面来描述曲面.首先列出顶点,然后使用顶点索引列表描述面.这就是为什么一旦我向列表中添加一个漩涡,它的索引就不能改变.

编辑:有一些建议(如igor)使用dict.这是扫描列表的好方法.但是,当我完成后,我需要按照创建的顺序打印出列表.如果我使用dict,我需要打印出按值排序的键.有没有一个好方法呢?

编辑:我实施了www.brool.com建议.这是最简单,最快速的.它本质上是一个有序的Dict,但没有开销.表现很棒!

python optimization list

8
推荐指数
3
解决办法
9407
查看次数

什么是确保列表中所有元素不同的最pythonic方法?

我在Python中有一个列表,我作为程序的一部分生成.我有一个强烈的假设,即这些都是不同的,我用断言来检查.

这就是我现在这样做的方式:

如果有两个要素:

try:
    assert(x[0] != x[1])
except:
    print debug_info
    raise Exception("throw to caller")
Run Code Online (Sandbox Code Playgroud)

如果有三个:

try:
    assert(x[0] != x[1])
    assert(x[0] != x[2])
    assert(x[1] != x[2])
except:
    print debug_info
    raise Exception("throw to caller")
Run Code Online (Sandbox Code Playgroud)

如果我必须用四个元素来做这件事,我会发疯的.

有没有更好的方法来确保列表中的所有元素都是唯一的?

python list unique

8
推荐指数
3
解决办法
624
查看次数

Core i3/5/7 CPU是否提供了测量IPC的机制?

过去十年中的所有英特尔CPU(至少)都包括一组可以计算各种事件的性能监视器.最新的Intel CPU,Core i3,i5和i7(又名Nehalem)是否提供计算每时钟指令(IPC)的机制?如果是这样,他们是如何使用的?

如果这是可能的,我可能会在汇编中为此编写代码,但Windows或Linux系统调用也可能有用.

x86 intel performancecounter

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

在ac字符串中更改一个char

我试图理解为什么以下代码是非法的:

int main ()
{
    char *c = "hello";
    c[3] = 'g'; // segmentation fault here
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器遇到什么时会做什么char *c = "hello";

我理解它的方式,它是一个自动的char数组,并且c是指向第一个char的指针.如果是这样,c[3]就像*(c + 3)我应该能够完成作业.

只是想了解编译器的工作方式.

c arrays

8
推荐指数
2
解决办法
7017
查看次数

为什么我应该在System Verilog中使用解压缩的向量?

跟进有关SV紧缩和非紧缩向量之间的差异问题,为什么我会永远想用解压载体?
打包向量具有以下优点:解压缩的向量不具有:

  • 您可以对它们执行按位操作
  • 您可以对它们执行算术运算
  • 你可以把它们切成片
  • 您可以将它们复制为整个矢量
  • 你可以用un packed矢量做任何事情(据我所知)

解包载体有多大优势?

system-verilog

7
推荐指数
2
解决办法
4257
查看次数

如何使用Python中的loadmat访问从.mat文件导入的结构中的字段?

按照这个问题(并回答)如何读取使用Scipy在Matlab中创建的.mat文件,我想知道如何访问导入结构中的字段.

我在Matlab中有一个文件,我可以从中导入一个结构:

>> load bla % imports a struct called G
>> G

G = 

         Inp: [40x40x2016 uint8]
         Tgt: [8x2016 double]
         Ltr: [1x2016 double]
    Relevant: [1 2 3 4 5 6 7 8]
Run Code Online (Sandbox Code Playgroud)

现在我想在Python中做同样的事情:

x = scipy.io.loadmat('bla.mat')
>>> x
{'__version__': '1.0', '__header__': 'MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed Jun 07 21:17:24 2006', 'G': array([[<scipy.io.matlab.mio5.mat_struct object at 0x0191F230>]], dtype=object), '__globals__': []}
>>> x['G']
array([[<scipy.io.matlab.mio5.mat_struct object at 0x0191F230>]], dtype=object)
>>> G = x['G']
>>> G
array([[<scipy.io.matlab.mio5.mat_struct object at …
Run Code Online (Sandbox Code Playgroud)

python file-io matlab scipy mat-file

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

如何在Perl中使用任意长度的整数?

在Perl中是否有任何标准方法可以使用任意长度的整数?我正在研究为测试生成x64程序集的代码,我厌倦了一次操作32位.

我正在使用Perl 5.10.0,因为它的价值.

perl integer arbitrary-precision

7
推荐指数
2
解决办法
2003
查看次数

正则表达式:使用vim为每个句子添加换行符

我想知道如何将一个段落变成vim中的子弹句.

之前:

sentence1. sentence2.  sentence3.  sentence4.  sentence5.  sentence6. 
sentence7. 
Run Code Online (Sandbox Code Playgroud)

后:

SENTENCE1.

SENTENCE2.

sentence3

sentence4.

sentence5.

regex vim

7
推荐指数
2
解决办法
4698
查看次数