有一种简单的方法可以在小数点上对齐一列浮点数吗?换句话说,我希望输出像(垂直条'|'仅用于清晰目的)
(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) 是否有可能编写一个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的递归解决方案,真是太棒了.
鉴于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) 设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) 我想添加上下文菜单这个漂亮的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脚本?
基本上我想要获得的缩进样式是维基百科上描述为“Lisp 样式”的样式:
while (x == y) {
something();
somethingelse(); }
Run Code Online (Sandbox Code Playgroud)
我正在使用自定义.clang-format
文件(版本 3.8),但我找不到任何适合我需要的选项。
提前致谢。
假设我有一个表达式(实际上我的更复杂,成千上万的字符)
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)
?
我使用(在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,而不增加文件大小?
预先感谢您提供任何线索。
作为将浮点数与表格数字数据的小数分隔符对齐的解决方法,我尝试找到一个正则表达式来用空格替换(全局后验)尾随零,规则如下:
由于 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 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) 我有一个类似的数据帧
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) 在这个问题中,"单位"是指物理量中使用的"度量单位".
我想安全地解析包含物理量(例如'23 kg')的不可信用户输入字符串.我想使用一个可用于Python的软件包(如Unum或Quantities),因为它们负责单元之间的转换,简化数学表达式中包含的单元,减少到基本单元,但我找不到办法将字符串转换为除了使用之外的(上述包的)对象eval()
,这似乎是不安全的.
例如,假设kg
并且cm
绑定到Unum包对象并引用千克和厘米单位,我需要一个能够从字符串返回Unum包对象的函数,如:
cast_to_unit("100 kg/cm")
要么
"100 kg/cm".asUnit()
eval()
?如果不,python ×6
format ×2
indexing ×2
lisp ×2
c++ ×1
casting ×1
clang-format ×1
combinations ×1
common-lisp ×1
contextmenu ×1
count ×1
dictionary ×1
directory ×1
expression ×1
image ×1
imagemagick ×1
indentation ×1
jpeg ×1
list ×1
macros ×1
max ×1
maxima ×1
nested-loops ×1
pandas ×1
recursion ×1
regex ×1
replace ×1
string ×1
symbols ×1
tuples ×1
windows ×1