小编mmj*_*mmj的帖子

垂直对齐浮点数小数点

有一种简单的方法可以在小数点上对齐一列浮点数吗?换句话说,我希望输出像(垂直条'|'仅用于清晰目的)

(format t "~{|~16,5f|~%~}" '(798573.467 434.543543 2.435 34443.5))
Run Code Online (Sandbox Code Playgroud)

是的

|    798573.44000|
|       434.54355|
|         2.43500|
|     34443.50000|
Run Code Online (Sandbox Code Playgroud)

但是使用尾随空格而不是零,如下所示:

|    798573.44   |
|       434.54355|
|         2.435  |
|     34443.5    |
Run Code Online (Sandbox Code Playgroud)

lisp format floating-point common-lisp vertical-alignment

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

Lisp宏(或函数)用于嵌套循环

是否有可能编写一个Common Lisp宏来获取维度和变量列表,一个体(迭代),并创建由列表指定的嵌套循环组成的代码?

就是这样的:

(nested-loops '(2 5 3) '(i j k) whatever_loop_body)
Run Code Online (Sandbox Code Playgroud)

应扩大到

(loop for i from 0 below 2 do
  (loop for j from 0 below 5 do
    (loop for k from 0 below 3 do
      whatever_loop_body)))
Run Code Online (Sandbox Code Playgroud)

跟进

正如怀远正确指出的那样,我必须知道在编译时传递给宏的参数.如果你真的需要我的功能,请看下面.

如果你对宏有好处,那就选择6502的递归解决方案,真是太棒了.

lisp macros recursion nested-loops

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

找到`itertools` Python模块返回的给定组合(自然数)的索引

鉴于k第一个n自然数的组合,由于某种原因,我需要在返回的那些中找到这种组合的位置itertools.combination(range(1,n),k)(原因是这样我可以使用a list而不是a dict来访问与每个组合相关联的值,知道组合).

由于itertools以常规模式产生组合,因此可以做到(并且我也找到了一个简洁的算法),但我正在寻找一种更快/更自然的方式,我可能会忽略它.

顺便说一句,这是我的解决方案:

def find_idx(comb,n):
    k=len(comb)
    idx=0
    last_c=0
    for c in comb:
        #idx+=sum(nck(n-2-x,k-1) for x in range(c-last_c-1)) # a little faster without nck caching
        idx+=nck(n-1,k)-nck(n-c+last_c,k) # more elegant (thanks to Ray), faster with nck caching
        n-=c-last_c
        k-=1
        last_c=c
    return idx
Run Code Online (Sandbox Code Playgroud)

其中nck返回二项式系数n,k.

例如:

comb=list(itertools.combinations(range(1,14),6))[654] #pick the 654th combination
find_idx(comb,14) # -> 654
Run Code Online (Sandbox Code Playgroud)

这是一个等价但可能不太复杂的版本(实际上我从下一个版本中导出了前一个版本).我将组合的整数c视为二进制数字中1的位置,我在解析0/1时构建了一个二叉树,我在解析过程中找到了一个常规的索引增量模式:

def find_idx(comb,n):
    k=len(comb)
    b=bin(sum(1<<(x-1) for x in comb))[2:]
    idx=0
    for …
Run Code Online (Sandbox Code Playgroud)

python indexing combinations python-itertools

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

从Python列表中查找最大元素的索引

设v是一个数字列表

v = [3,5,2,4,8,6,1]
Run Code Online (Sandbox Code Playgroud)

为什么以下代码找到max元素及其索引会出错?('int'对象不可订阅)

reduce(lambda x,y: max(x[1],y[1]), enumerate(v))
Run Code Online (Sandbox Code Playgroud)

PS我知道有其他方法可以做到这一点,如下面的那个,但我想理解为什么前一个不起作用.

max(enumerate(v), key= lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)

结语

Simeon指出我的代码确实是错误的,因为lambda应该返回一个元组,而不是一个数字.理解这一点,我的代码可以通过以下方式轻松修复:

reduce(lambda x,y: x[1]<y[1] and y or x, enumerate(v))
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这比约慢30%

max(enumerate(v), key= lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)

python indexing list max

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

将"删除空文件夹"添加到Windows上下文菜单

我想添加上下文菜单这个漂亮的shell脚本,它自动删除运行它的文件夹下的所有空文件夹和子文件夹:

for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"
Run Code Online (Sandbox Code Playgroud)

要将这样的项添加到(目录)上下文菜单,我应该运行一个reg扩展名为内容的文件

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Delete empty folders]

[HKEY_CLASSES_ROOT\Directory\shell\Delete empty folders\Command]
@=for /f "usebackq delims=" %%d in (`"dir %1 /ad/b/s | sort /R"`) do rd "%%d"
Run Code Online (Sandbox Code Playgroud)

但是这个不起作用.如何正确运行一个衬管shell脚本?

windows directory contextmenu

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

如何使 clang-format 保持右大括号在同一行

基本上我想要获得的缩进样式是维基百科上描述为“Lisp 样式”的样式:

while (x == y) {
    something();
    somethingelse(); }
Run Code Online (Sandbox Code Playgroud)

我正在使用自定义.clang-format文件(版本 3.8),但我找不到任何适合我需要的选项。

提前致谢。

c++ indentation clang-format

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

Maxima:如何用符号替换常见的子表达式

假设我有一个表达式(实际上我的更复杂,成千上万的字符)

expr:a+b*c+b*c*d;
Run Code Online (Sandbox Code Playgroud)

我想用符号替换内部子表达式(有助于避免重新计算公共子表达式),k代替b*c:

subst(b*c=k,expr);
Run Code Online (Sandbox Code Playgroud)

回报

k+b*c*d+a
Run Code Online (Sandbox Code Playgroud)

如何让Maxima计算出"正确"的替代以便返回(除了obviuos简化,这里)

k+k*d+a
Run Code Online (Sandbox Code Playgroud)

expression replace symbols maxima

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

在不增加文件大小的情况下设置 JPG 密度 (dpi)

我使用(在Windows下)以下命令

magick convert -units pixelsperinch file_in -density 600 file_out
Run Code Online (Sandbox Code Playgroud)

设置JPG图像的dpi(没有重采样,因为据我所知,dpi基本上只是一个指定像素大小的标签)。它有效,但我不明白为什么它会增加文件大小几千字节(我的图像最初为 1658 kB 到 1717 kB,增加了 59 kB),而我预计会增加(如果有的话)只是几个字节。

我是不是搞错了什么?是否可以通过命令行(也欢迎 ImageMagick 以外的工具)更改 JPG 的密度/dpi,而不增加文件大小?

预先感谢您提供任何线索。

jpeg image imagemagick pixel-density

4
推荐指数
1
解决办法
2857
查看次数

Python正则表达式用空格全局替换尾随零

作为将浮点数与表格数字数据的小数分隔符对齐的解决方法,我尝试找到一个正则表达式来用空格替换(全局后验)尾随零,规则如下:

  1. 十进制数字后没有尾随零
  2. 如果小数点分隔符后的第一个数字为零,则保留它

由于 Python 正则表达式引擎对需要固定宽度模式的后视的限制,我无法找到令人满意的解决方案。这是我尝试的一个工作示例(Python 3.x);不要依赖解决方案中的竖线,它们在示例中只是为了清楚起见:

import re
# formatmany is just a way to speed up building of multiline string of tabular data
formatmany=lambda f:lambda *s:'\n'.join(f.format(*x) for x in s)

my_list = [[12345, 12.345, 12.345, 12.345],
           [12340, 12.34 , 12.34 , 12.34 ],
           [12345, 12.005, 12.005, 12.005],
           [12340, 12.04 , 12.04 , 12.04 ],
           [12300, 12.3  , 12.3  , 12.3  ],
           [12000, 12.0  , 12.0  , 12    ]]
my_format = formatmany('|{:8d}|{:8.2f}|{:8.3f}|{:8.4f}|')
my_string = my_format(*my_list) # this …
Run Code Online (Sandbox Code Playgroud)

python regex string-formatting text-alignment

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

Python:将元组作为键的格式化字典

我想格式化一个字典进行打印(Python 2.7.3),字典有元组作为键.使用其他类型的键我可以做

>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W', 'altitude':100}
>>> 'Coordinates: {0[latitude]}, {0[longitude]}'.format(coord)
'Coordinates: 37.24N, -115.81W'
Run Code Online (Sandbox Code Playgroud)

我尝试了相同但它不适用于元组键.

>>> a={(1,1):1.453, (1,2):2.967}
>>> a[1,1]
1.453
>>> 'Values: {0[1,1]}'.format(a)

Traceback (most recent call last):
  File "<pyshell#66>", line 1, in <module>
    'Values: {0[1,1]}'.format(a)
KeyError: '1,1'
Run Code Online (Sandbox Code Playgroud)

为什么?如何在格式化字符串中引用元组键?

跟进

看来我们不能(见下面的答案).正如agf很快指出的那样,Python无法处理这个问题(希望它会被实现).与此同时,我设法通过以下解决方法引用格式字符串中的元组键:

my_tuple=(1,1)
b={str(x):a[x] for x in a} # converting tuple keys to string keys
('Values: {0[%s]}'%(str(my_tuple))).format(b) # using the tuple for formatting
Run Code Online (Sandbox Code Playgroud)

python format dictionary tuples

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

使用pandas计算给定集合中行值的出现次数

我有一个类似的数据帧

     a   b   c   d   e
0   36  38  27  12  35
1   45  33   8  41  18
4   32  14   4  14   9
5   43   1  31  11   3
6   16   8   3  17  39
...
Run Code Online (Sandbox Code Playgroud)

我想为每一行计算给定集合中值的出现次数.

我提出了以下代码(Python 3)似乎可行,但我正在寻找效率,因为我的真实数据帧更加复杂和大:

import pandas as pd
import numpy as np

def column():
    return [np.random.randint(0,49) for _ in range(20)]

df = pd.DataFrame({'a': column(),'b': column(),'c': column(),'d': column(),'e': column()})

given_set = {3,8,11,18,22,24,35,36,42,47}

def count_occurrences(row):
    return sum(col in given_set for col in (row.a,row.b,row.c,row.d,row.e))

df['count'] = df.apply(count_occurrences, …
Run Code Online (Sandbox Code Playgroud)

python count pandas

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

在Python中将字符串转换为'unit'对象

在这个问题中,"单位"是指物理量中使用的"度量单位".

我想安全地解析包含物理量(例如'23 kg')的不可信用户输入字符串.我想使用一个可用于Python的软件包(如UnumQuantities),因为它们负责单元之间的转换,简化数学表达式中包含的单元,减少到基本单元,但我找不到办法将字符串转换为除了使用之外的(上述包的)对象eval(),这似乎是不安全的.

例如,假设kg并且cm绑定到Unum包对象并引用千克和厘米单位,我需要一个能够从字符串返回Unum包对象的函数,如:

cast_to_unit("100 kg/cm")

要么

"100 kg/cm".asUnit()

  1. 有没有办法从提到的包中获得这样的功能?如果不,
  2. 有没有办法安全使用 eval()?如果不,
  3. 有没有其他包(甚至不是在Python中)具有这样的功能?

python string casting units-of-measurement

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