私信  •  关注

Alexander

Alexander 最近回复了
2 年前
回复了 Alexander 创建的主题 » 系统。refcount()返回的值比预期的python3大得多

int 这很特别。

它的值非常多(双关语)而且很小,这是远对象开销方面最糟糕的情况(它浪费时间进行分配,GCs变得更慢,因为它们有更多堆对象要扫描,并且浪费时间进行引用计数和取消分配)。通常情况下,语言运行时会花费大量时间来优化特殊情况,比如 智力 , bool

根据Python的具体实现,有可能 智力 对象表示为:

  1. 常规的、普通的堆分配对象(即,没有特殊的优化)。
  2. 作为常规的堆分配对象,但使用一个共享对象池来表示所有最常见的值。(例如,每一次 1 是同一个对象,被引用 到处都是 1. (已使用)
  3. 或者作为一个 tagged pointer ,这完全不涉及堆分配(对于适当小的整数值)。

在案例2或3中,如果它是“普通”对象,它的引用计数将不是您可能期望的。

4 年前
回复了 Alexander 创建的主题 » 用于格式化字符串的Python解包列表[重复]

下面是更完整的回答:

def convert_player_types_to_str(player_types):
    n = len(player_types)
    if not n:
        return ''
    if n == 1:
        return player_types[0]
    return ', '.join(player_types[:-1]) + f' and {player_types[-1]}'

>>> convert_player_types_to_str(['normal'])
'normal'

>>> convert_player_types_to_str(['normal', 'ghost'])
'normal and ghost'

>>> convert_player_types_to_str(['normal', 'ghost', 'goblin'])
'normal, ghost and goblin'
4 年前
回复了 Alexander 创建的主题 » Python Dataframe:基于特定条件删除重复项

尝试首先根据距离对数据帧进行排序,然后删除重复的商店。

df = shops_df.sort_values('Distance')
df = df[~df['Shop ID'].duplicated()]  # The tilda (~) inverts the boolean mask.

或者只是一个链式表达式(每个注释来自@chmielcode)。

df = (
    shops_df
    .sort_values('Distance')
    .drop_duplicates(subset='Shop ID', keep= 'first')
    .reset_index(drop=True)  # Optional.
)
4 年前
回复了 Alexander 创建的主题 » python pandas:按其他列分组时创建累积平均值

即使名字没有按 transforming 这个 expanding 函数..

>>> df.assign(cumAverage=df.groupby('name', sort=False)['value'].transform(lambda x: x.expanding().mean()))
   name  value  cumAverage
0  Jack    0.0       0.000
1  Jack    1.0       0.500
2  Jack    0.5       0.500
3  Jack    1.0       0.625
4  Jill    0.0       0.000
5  Jill    2.0       1.000

# Unsorted dataframe.
df = pd.DataFrame({"name": ['Jack'] * 3 + ['Jill'] * 2 + ['Jack'], "value": [0, 1, .5, 0, 2, 1]})
>>> df.assign(cumAverage=df.groupby('name', sort=False)['value'].transform(lambda x: x.expanding().mean()))
   name  value  cumAverage
0  Jack    0.0       0.000
1  Jack    1.0       0.500
2  Jack    0.5       0.500
3  Jill    0.0       0.000
4  Jill    2.0       1.000
5  Jack    1.0       0.625
5 年前
回复了 Alexander 创建的主题 » 使用python从一系列日期中检查项目列表

您可以使用条件列表理解:

import datetime as dt

f = '%d/%m/%Y'  # Date format.

>>> [date for date in c 
     if dt.datetime.strptime(a, f) 
     <= dt.datetime.strptime(date, f) 
     <= dt.datetime.strptime(b, f)]
['01/08/2017',
 '20/08/2017',
 '21/08/2017',
 '22/08/2017',
 '23/08/2017',
 '24/08/2017',
 '25/08/2017',
 '26/08/2017',
 '27/08/2017',
 '28/08/2017']