小编Wai*_*ung的帖子

我可以在Python列表上创建"视图"吗?

我有一个很大的清单l.我想从元素4到6创建一个视图.我可以使用序列切片来完成.

>>> l=range(10)
>>> lv=l[3:6]
>>> lv
[3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

然而,lv是l片的副本.如果我更改基础列表,则lv不会反映更改.

>>> l[4] = -1
>>> lv
[3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

反之亦然我希望修改lv也反映在l中.除此之外,列表大小不会改变.

我不期待建立一个大班来做这件事.我只是希望其他Python大师可能知道一些隐藏的语言技巧.理想情况下,我希望它能像C中的指针算术一样.

int lv[] = l + 3;
Run Code Online (Sandbox Code Playgroud)

c python arrays list

41
推荐指数
5
解决办法
9473
查看次数

在Python中使用class作为命名空间是一个好主意

我把一堆相关的东西放进了一堂课.主要目的是将它们组织到命名空间中.

class Direction:

  north = 0
  east = 1
  south = 2
  west = 3

  @staticmethod
  def turn_right(d):
    return turn_to_the_right

  @staticmethod
  def turn_left(d):
    return turn_to_the_left



# defined a short alias because direction will be used a lot
D = Direction

d0 = D.north
d1 = D.turn_right(d)
Run Code Online (Sandbox Code Playgroud)

涉及的对象概念不多.在C++中,我将使用实际的语言关键字namespace.Python中没有这样的东西.所以我试图class用于此目的.

这是一个好主意吗?这种方法有任何陷阱吗?

我昨天刚回答了一个相关的问题.这个问题以不同的方式提出.这是我需要为自己做出的实际决定.

python中的静态方法与模块函数 - Stack Overflow

python中的静态方法与模块函数

python oop namespaces class

25
推荐指数
3
解决办法
3876
查看次数

当我使用脚本名称在Windows上运行Python脚本时,无法重定向输出

这是在Windows 7(64位),Python 2.6和Win32 Extensions for Python上运行的.

我有一个简单的脚本,只打印"你好世界".我可以用它启动它python hello.py.在这种情况下,我可以将输出重定向到文件.但是如果我只是hello.py在命令行输入并重定向输出来运行它,我会得到一个例外.

C:> python hello.py
hello world

C:> python hello.py >output

C:> type output
hello world

C:> hello.py
hello world

C:> hello.py >output
close failed in file object destructor:
Error in sys.excepthook:

Original exception was:
Run Code Online (Sandbox Code Playgroud)

我想我升级到Windows 7后首先得到此错误.我记得它应该在XP中运行.我见过有人在谈论这个bug python-Bugs-1012692 | 无法将输入传递给python程序.但那是很久以前的事了.它没有提到任何解决方案.

有没有人经历过这个?有人可以帮忙吗?

python winapi redirect command-line windows-7

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

PySpark从TimeStampType列向DataFrame添加一列

我有一个看起来像这样的DataFrame.我想在date_time现场操作.

root
 |-- host: string (nullable = true)
 |-- user_id: string (nullable = true)
 |-- date_time: timestamp (nullable = true)
Run Code Online (Sandbox Code Playgroud)

我试图添加一列来提取这一天.到目前为止,我的尝试失败了.

df = df.withColumn("day", df.date_time.getField("day"))

org.apache.spark.sql.AnalysisException: GetField is not valid on fields of type TimestampType;
Run Code Online (Sandbox Code Playgroud)

这也失败了

df = df.withColumn("day", df.select("date_time").map(lambda row: row.date_time.day))

AttributeError: 'PipelinedRDD' object has no attribute 'alias'
Run Code Online (Sandbox Code Playgroud)

知道如何做到这一点?

python apache-spark apache-spark-sql pyspark

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

Python数据结构的内存大小

如何找出Python数据结构的内存大小?我正在寻找类似的东西:

sizeof({1:'hello', 2:'world'})
Run Code Online (Sandbox Code Playgroud)

如果它以递归方式计算每件事物,那就太好了.但即使是基本的非递归结果也有帮助.基本上我想了解一下各种实现选项,比如tuple vs list vs class在内存占用方面.这很重要,因为我计划将数百万个对象实例化.

我目前的开发平台是CPython 2.6.

python memory memory-management data-structures

17
推荐指数
1
解决办法
1万
查看次数

从Windows命令行运行Python脚本,未传递参数

我有一堆用Python编写的脚本.我从Windows命令提示符运行它们

c:> my_script.py arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

这可以在多年前的每台计算机和每个Windows版本中使用.刚才我的Windows 7系统崩溃了.该脚本已加载并执行.但是没有一个参数传递给脚本.

为了说明这一点,我有一个名为py_echo.py的脚本:

from pprint import pprint as pp
import sys

if __name__ =='__main__':
    pp(sys.argv)
Run Code Online (Sandbox Code Playgroud)

然后我用参数a,b,c执行它.他们都没有通过.

c:\Python27\Lib\site-packages>py_echo.py a b c
['C:\\0\\usr\\bin\\py_echo.py']
Run Code Online (Sandbox Code Playgroud)

如果我显式运行python.exe,则正确传递参数

c:\Python27\Lib\site-packages>python.exe c:\0\usr\bin\py_echo.py a b c
['c:\\0\\usr\\bin\\py_echo.py', 'a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

它以前工作过.在我从PC上卸载了一堆旧版本的Python解释器和模块之后,它才开始崩溃.重新安装Python没有帮助.我想知道我该怎么做才能解决这个问题?

我已经变得非常依赖我多年来建立的脚本.当他们休息时我觉得非常残疾:(

python windows command-line command-line-arguments

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

我可以为类而不是实例定义__repr__吗?

我可以__repr__为类而不是实例定义一个吗?例如,我正在尝试这样做

class A(object):
    @classmethod
    def __repr__(cls):
        return 'My class %s' % cls
Run Code Online (Sandbox Code Playgroud)

我得到的是

In [58]: a=A()

In [59]: a
Out[59]: My class <class '__main__.A'>

In [60]: A
Out[60]: __main__.A
Run Code Online (Sandbox Code Playgroud)

我试图让第60行的输出看起来像"我的A类",而不是实例a.我想这样做的原因是我使用Python的元类生成了很多类.而且我想要一种更易读的方法来识别类而不是股票代理.

python metaprogramming metaclass

11
推荐指数
1
解决办法
2434
查看次数

创建每个实例的属性描述符?

通常Python描述符被定义为类属性.但在我的情况下,我希望每个对象实例都有不同的设置描述符,这取决于输入.例如:

class MyClass(object):
  def __init__(self, **kwargs):
    for attr, val in kwargs.items():
      self.__dict__[attr] = MyDescriptor(val)
Run Code Online (Sandbox Code Playgroud)

每个对象都具有在实例化时确定的不同属性集.由于这些是一次性对象,因此首先将它们子类化是不方便的.

tv = MyClass(type="tv", size="30")
smartphone = MyClass(type="phone", os="android")

tv.size   # do something smart with the descriptor
Run Code Online (Sandbox Code Playgroud)

将描述符分配给对象似乎不起作用.如果我尝试访问该属性,我会得到类似的东西

<property at 0x4067cf0>
Run Code Online (Sandbox Code Playgroud)

你知道为什么这不起作用吗?有什么工作吗?

python metaprogramming propertydescriptor

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

如何自动选择n种不同的颜色来绘制不同的物体?

我需要在图表上绘制n个不同的对象.我想为每个颜色选择不同的颜色,以使它们可以区分.物体将被移动,所以我不能指望像"四色定理"这样的想法为不相邻的物品分配相同的颜色.到目前为止,我的问题需要最多20个不同的项目.

是否有一种很好的方法可以选择不同的颜色,使它们尽可能彼此区分?

visualization data-visualization image colors

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

如何使任意级别的嵌套for循环

我可以做这样的两级嵌套循环

for i1 in 1:n
  for i2 in 1:n
    do something with (i1,i2)      
Run Code Online (Sandbox Code Playgroud)

如何将其扩展到任意级别的嵌套循环?

例如,我可以在Python中执行此操作来循环n ^ m的笛卡尔积

for i in (itertools.product(xrange(n),repeat=m)):
Run Code Online (Sandbox Code Playgroud)

喜欢

for i in (itertools.product(xrange(2),repeat=3)):
    print i

(0, 0, 0)
(0, 0, 1)
(0, 1, 0)
(0, 1, 1)
(1, 0, 0)
(1, 0, 1)
(1, 1, 0)
(1, 1, 1)
Run Code Online (Sandbox Code Playgroud)

谢谢@ tholy的评论.我已经成功应用了Iterators.jl.我是朱莉娅新手,所以我的代码可能很笨拙.

for i in product(repmat(Any[1:2],3)...)
    println(i)
end

(1,1,1)
(2,1,1)
(1,2,1)
(2,2,1)
(1,1,2)
(2,1,2)
(1,2,2)
(2,2,2)
Run Code Online (Sandbox Code Playgroud)

julia

6
推荐指数
2
解决办法
1231
查看次数

Highcharts - 具有相同x比例的多个图

我想制作一个x轴对齐的多重绘图,以便我们可以比较两组数据.我希望它看起来像这样

/sf/answers/825758741/

在我的情况下,有一些额外要求,一些情节是线条,一些是酒吧.因此,即使数据范围相同,默认比例也不会对齐.

我发现了一些关于"堆叠"图表的好建议.它有点复杂但是有前途的尝试方式.

/sf/answers/852531641/

然而,我还有其他用例可以推动简单堆叠的包络.例如,当x轴和y轴都必须像这样对齐时,我想做散点图矩阵

http://www.statmethods.net/graphs/images/spmatrix3.png

不是将许多图表放在一个Highchart中,这可能需要有许多单独的图表,但可以更好地控制轴的布局方式.

axis scatter-plot highcharts

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

Numpy矩阵乘法与自定义点积

默认矩阵乘法计算为

c[i,j] = sum(a[i,k] * b[k,j])
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用自定义公式而不是点积来获取

c[i,j] = sum(a[i,k] == b[k,j])
Run Code Online (Sandbox Code Playgroud)

在numpy中有一种有效的方法吗?

numpy vectorization matrix-multiplication dot-product

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