小编jfs*_*jfs的帖子

在Python中将Unicode字符串转换为字符串(包含额外符号)

如何将Unicode字符串(包含££等额外字符)转换为Python字符串?

python string unicode type-conversion

486
推荐指数
8
解决办法
91万
查看次数

检查列表中的所有元素是否相同

我需要以下功能:

输入:alist

输出:

  • True 如果输入列表中的所有元素使用标准相等运算符评估为彼此相等;
  • False 除此以外.

性能:当然,我不希望招致任何不必要的开销.

我觉得最好是:

  • 遍历列表
  • 比较相邻元素
  • 以及AND所有结果布尔值

但我不确定最恐怖的方式是什么.


编辑:

谢谢你所有的好答案.我评价了几个,而且很难在@KennyTM和@Ivo van der Wijk解决方案之间做出选择.

缺少短路功能只会对早期具有不相等元素的长输入(超过约50个元素)造成伤害.如果这种情况经常发生(通常取决于列表的长度),则需要进行短路.最好的短路算法似乎是@KennyTM checkEqual1.然而,它为此付出了巨大的代价:

  • 高达20倍的性能几乎相同的列表
  • 短名单上的表现高达2.5倍

如果早期不等元素的长输入没有发生(或很少发生),则不需要短路.然后,到目前为止最快的是@Ivo van der Wijk解决方案.

python algorithm comparison

351
推荐指数
10
解决办法
28万
查看次数

在Python中将字符串日期转换为时间戳

如何将格式的字符串转换"%d/%m/%Y"为时间戳?

"01/12/2011" -> 1322697600
Run Code Online (Sandbox Code Playgroud)

python datetime

193
推荐指数
12
解决办法
39万
查看次数

Matrix中的矩阵转置

我正在尝试为python创建一个矩阵转置函数,但我似乎无法使它工作.说我有

theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
Run Code Online (Sandbox Code Playgroud)

我希望我的功能能够提出来

newArray = [['a','d','g'],['b','e','h'],['c', 'f', 'i']]
Run Code Online (Sandbox Code Playgroud)

换句话说,如果我要将这个2D数组打印为列和行,我希望将行转换为列,将列转换为行.

到目前为止,我做到了这一点,但它不起作用

def matrixTranspose(anArray):
    transposed = [None]*len(anArray[0])
    for t in range(len(anArray)):
        for tt in range(len(anArray[t])):
            transposed[t] = [None]*len(anArray)
            transposed[t][tt] = anArray[tt][t]
    print transposed
Run Code Online (Sandbox Code Playgroud)

python list multidimensional-array

134
推荐指数
7
解决办法
13万
查看次数

在C++中测试一个数字是2的幂是最简单的方法是什么?

我需要一个这样的函数:

// return true iff 'n' is a power of 2, e.g.
// is_power_of_2(16) => true  is_power_of_2(3) => false
bool is_power_of_2(int n);
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议我怎么写这个?你能告诉我一个可以找到这种算法的好网站吗?

c++ algorithm bit-manipulation

86
推荐指数
8
解决办法
6万
查看次数

空循环比C中的非空循环慢

在试图了解一行C代码执行的时间时,我注意到这个奇怪的事情:

int main (char argc, char * argv[]) {
    time_t begin, end;
    uint64_t i;
    double total_time, free_time;
    int A = 1;
    int B = 1;

    begin = clock();
    for (i = 0; i<(1<<31)-1; i++);
    end = clock();
    free_time = (double)(end-begin)/CLOCKS_PER_SEC;
    printf("%f\n", free_time);

    begin = clock();
    for (i = 0; i<(1<<31)-1; i++) {
        A += B%2;
    }
    end = clock();
    free_time = (double)(end-begin)/CLOCKS_PER_SEC;
    printf("%f\n", free_time);

    return(0);
}
Run Code Online (Sandbox Code Playgroud)

执行时显示:

5.873425
4.826874
Run Code Online (Sandbox Code Playgroud)

为什么空循环使用的时间多于第二个有指令的时间?当然,我尝试了很多变种,但每次,空循环所需的时间多于单个指令.

请注意,我已尝试交换循环顺序并添加一些预热代码,但它根本没有改变我的问题.

我正在使用代码块作为IDE与GNU gcc编译器,linux ubuntu 14.04并且拥有2.3GHz的四核intel i5(我尝试在单核上运行程序,这不会改变结果).

c performance loops

65
推荐指数
4
解决办法
6186
查看次数

如何缩进Python列表推导?

列表推导在某些情况下可能很有用,但它们也可能相当可怕阅读..作为一个有点夸张的例子,你会如何缩进以下内容?

allUuids = [x.id for x in self.db.query(schema.allPostsUuid).execute(timeout = 20) if x.type == "post" and x.deleted is not False]
Run Code Online (Sandbox Code Playgroud)

python coding-style

63
推荐指数
4
解决办法
2万
查看次数

当我使用os.system()或subprocess.call()时,如何隐藏控制台?

我写了一些如下的陈述:

os.system(cmd) #do something
subprocess.call('taskkill /F /IM exename.exe')
Run Code Online (Sandbox Code Playgroud)

两者都会弹出一个控制台.

如何阻止它弹出控制台?

python windows console subprocess

59
推荐指数
2
解决办法
4万
查看次数

Set literal给出了set函数调用的不同结果

为什么set函数调用会消除欺骗,但解析集合文字却没有?

>>> x = Decimal('0')
>>> y = complex(0,0)
>>> set([0, x, y])
{0}
>>> {0, x, y}
{Decimal('0'), 0j}
Run Code Online (Sandbox Code Playgroud)

(Python 2.7.12.可能与类似问题的根本原因相同)

python hash set python-2.x python-internals

56
推荐指数
2
解决办法
2667
查看次数

为什么大小为2⁶³36字节,但2⁶³-1只有24字节?

Python中的所有东西都是一个对象.因此Python中int的大小将比平常大.

>>> sys.getsizeof(int())
24
Run Code Online (Sandbox Code Playgroud)

好的,但为什么还需要12个字节才能进行2?³比较2?³ - 1,而不仅仅是一个?

>>> sys.getsizeof(2**63)
36
>>> sys.getsizeof(2**62)
24
Run Code Online (Sandbox Code Playgroud)

我得到的2?³是一个long和2?³-1一个int,但为什么12个字节的区别?

不再直观,我尝试了一些其他的东西:

>>> a = 2**63
>>> a -= 2**62
>>> sys.getsizeof(a)
36
Run Code Online (Sandbox Code Playgroud)

a即使它现在可以在int中,仍然存储为long.所以这并不奇怪.但:

>>> a -= (2**63 - 1)
>>> a = 2**63
>>> a -= (2**63 - 1)
>>> a
1L
>>> sys.getsizeof(a)
28
Run Code Online (Sandbox Code Playgroud)

一个新的尺寸.

>>> a = 2**63
>>> a -= 2**63
>>> a
0L
>>> sys.getsizeof(a)
24
Run Code Online (Sandbox Code Playgroud)

回到24个字节,但仍然很长.

我得到的最后一件事:

>>> sys.getsizeof(long())
24
Run Code Online (Sandbox Code Playgroud)

题:

内存存储在这些场景中如何工作? …

python cpython python-2.7 python-internals

51
推荐指数
2
解决办法
5309
查看次数