小编And*_*ely的帖子

为什么两个相同的列表具有不同的内存占用?

我创建了两个名单l1l2,但每一个具有不同的创建方法:

import sys

l1 = [None] * 10
l2 = [None for _ in range(10)]

print('Size of l1 =', sys.getsizeof(l1))
print('Size of l2 =', sys.getsizeof(l2))
Run Code Online (Sandbox Code Playgroud)

但输出让我感到惊讶:

Size of l1 = 144
Size of l2 = 192
Run Code Online (Sandbox Code Playgroud)

使用列表推导创建的列表在内存中的大小更大,但是这两个列表在Python中是相同的.

这是为什么?这是CPython内部的一些东西,还是其他一些解释?

python memory-management list python-internals

148
推荐指数
2
解决办法
6418
查看次数

将浮动初始化为'+ inf',' - inf'和'nan'的替代方法

要将float常量初始化为+ inf,-inf,nan我总是使用带有字符串的float():

print(float('inf'), float('+inf'), float('-inf'), float('nan'))
Run Code Online (Sandbox Code Playgroud)

这打印:

[inf, inf, -inf, nan]
Run Code Online (Sandbox Code Playgroud)

1.)Python中是否存在初始化这些常量的替代方法(不使用字符串调用float)?

2.)我可以用一些数学运算产生这些常数(+/- inf,nan)吗?

例如,对于变量设置f+inf,通过编写类似f = 1.0 / 0.0(显然,这是零错误分公司).

python python-3.x

9
推荐指数
2
解决办法
1201
查看次数

Cachegrind:为什么这么多缓存未命中?

我目前正在学习Linux下的各种分析和性能实用程序,特别是valgrind/cachegrind.

我有以下玩具程序:

#include <iostream>
#include <vector>

int
main() {
    const unsigned int COUNT = 1000000;

    std::vector<double> v;

    for(int i=0;i<COUNT;i++) {
        v.push_back(i);
    }

    double counter = 0;
    for(int i=0;i<COUNT;i+=8) {
        counter += v[i+0];
        counter += v[i+1];
        counter += v[i+2];
        counter += v[i+3];
        counter += v[i+4];
        counter += v[i+5];
        counter += v[i+6];
        counter += v[i+7];
    }

    std::cout << counter << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

用这个程序编译g++ -O2 -g main.cpp并运行valgrind --tool=cachegrind ./a.out,然后cg_annotate cachegrind.out.31694 --auto=yes产生以下结果:

    --------------------------------------------------------------------------------
-- Auto-annotated source: /home/andrej/Data/projects/pokusy/dod.cpp
-------------------------------------------------------------------------------- …
Run Code Online (Sandbox Code Playgroud)

c++ performance profiling cpu-cache cachegrind

6
推荐指数
1
解决办法
348
查看次数

如何在Python中使用re替换两位数之间的字符?

我想处理一个字符串数据集,并将“-”替换为“。”。我有这个数据集:

AUDI XXX-R 2-0TS
AUDI XXX-R 2-0T
AUDI X-R 2-0
Run Code Online (Sandbox Code Playgroud)

我希望将“-”替换为“。” 因此,所有具有数字-number **的事件都应替换为数字.number **

我尝试添加以下正则表达式模式,但它也替换了字母的“-”

[^a-z-A-Z]?(\d)-(\d)?[a-zA-Z]?[a-z-A-Z]
Run Code Online (Sandbox Code Playgroud)

我需要这样的模式:无论字符串是两位数之间的“-”,都应替换为“。”。

python regex

5
推荐指数
1
解决办法
89
查看次数

How to search a list with nested dictionary by dictionary value, returning the index of the list with the dictionary element

If I have a list with some nested dictionaries each containing the same keyset and value type set.

list = [{'a': 1, 'b': 2.0, 'c': 3.0}, 
        {'a': 4, 'b': 5.0, 'c': 6.0}, 
        {'a': 7, 'b': 8.0, 'c': 9.0}]
Run Code Online (Sandbox Code Playgroud)

返回 '​​b' 字典键中 5.0 第一次出现的列表索引的最 Pythonic 方法是什么,如果没有找到,则返回 None ?

我知道我可以手动迭代和搜索:

#with the list above...

result = None
for dict in list:
  if dict['b'] == 5.0:
    result = list.index(dict)
    break
print result
#(prints 1)


#as another example, same code but searching for a …
Run Code Online (Sandbox Code Playgroud)

python dictionary list

3
推荐指数
1
解决办法
191
查看次数

通过分解旧数据框的列数据来创建新数据框

我有以下数据框

推销员 北访问 南面访问 东方访问 西访问
A 1 0 0 1
0 1 1 1
C 1 0 1 1

我想将上面的格式转换成下面的格式

推销员 方向 使用权
A 1
A 0
A 东方 0
A 西方 1
0
1
东方 1
西方 1

我尝试探索 split 和 transpose 函数,但没有得到预期的结果。有人可以帮忙编写代码以在 python 中进行上述更改吗?提前致谢。

python dataframe pandas

3
推荐指数
1
解决办法
52
查看次数

如何从字典中随机选择一个项目?

我是一名 Python 初学者,正在尝试制作 21 点游戏,并且不断收到有关此代码的多个关键错误

def rank(rank):
    rank={
        '2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'10':10,'Jack':10,
       'King':10,'Queen':10,'Ace':1}
    return random.choice(rank)
Run Code Online (Sandbox Code Playgroud)

当我尝试像这样调用函数时发生错误

def draw_card(card):
    card_rank=Card.rank(rank)
    card_suit=Card.suit(suit)
    card={card_suit:card_rank}
    return card
Run Code Online (Sandbox Code Playgroud)

尝试使用“Card”类中的“rank”函数将属性应用于新的“card”变量

python dictionary keyerror

2
推荐指数
1
解决办法
3630
查看次数

求b使a + b的总和等于xor b

我正在编写代码,使A 1<A<2*50找到一个值b,使得A+B==A^B

我试过了,但是对于巨大的价值,解决方案用尽了内存

def solve(A):
   if A==1:
       return 2
   for i in xrange(1,A+1):
        if A+i==A^i:
            return i
Run Code Online (Sandbox Code Playgroud)

期望通过大价值

python

2
推荐指数
1
解决办法
520
查看次数

实现函数avg(),将包含数字列表的列表作为输入

我根本不知道该怎么做作业,这让我感到压力:

实现函数avg(),该函数将包含数字列表的列表作为输入。每个数字列表代表特定学生在课程中获得的成绩。例如,这是一个四个学生的班级的输入列表:

[[95, 92, 86, 87], [66, 54], [89, 72, 100], [33, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

平均功能应每行打印每个学生的平均成绩。您可以假设每个成绩列表都是非空的,但您不能假设每个学生的成绩都相同。

avg ([[95, 92, 86, 87], [66, 54], [89, 72, 100], [33, 0, 0]])

90.0

60.0

87.0

11.0
Run Code Online (Sandbox Code Playgroud)

我完全迷路了,我知道我甚至还没有找到答案。这是我到目前为止所做的

def avg(grades):
      return avg(grades)
 grades =[INSERT LIST OF RANDOM NUMBER]
 avg(grades)
Run Code Online (Sandbox Code Playgroud)

是的,我知道这还不算近,而且我的大脑只有豌豆大小。我不知道。谁能帮助我并以白痴可以理解的方式进行解释?这只是第一个问题。它应该是最简单的,但我做不到。

功课要在几个小时内完成,所以我将不胜感激。

python python-3.x

2
推荐指数
1
解决办法
112
查看次数

如何识别/打印字典中具有最大值的键?

我发现了一些类似的问题,但没有一个能解决我的问题。按照这个例子:

d={'a': 6, 'b': 3, 'c': 8, 'd': 1}
Run Code Online (Sandbox Code Playgroud)

现在我想打印具有最大数字(在本例中'c')和最小(在本例中'd')的键。意识到我想要打印的是关键,而不是它的价值。

python dictionary key

2
推荐指数
1
解决办法
91
查看次数