我有一个看起来像这样的文件:
{val1 {val2 {d1 d2 d3}}}
Run Code Online (Sandbox Code Playgroud)
我想制作一个 dict 或其他合适的数据结构,以便像这样访问结构:
data[val1][val2]
Run Code Online (Sandbox Code Playgroud)
将以d1, d2, d3另一种合适的数据结构(例如列表、元组或集合)输出数据值。
是否有一个内置的库函数可以做到这一点,或者任何人都可以提出一种简单的方法来做到这一点?
注意:数据点的数量d1 d2 d3可能不是恒定的,所以对于一组不同的值,我可以d1 d2 d3 d4 d5等。
编辑:我应该补充一点,我写了输出,所以如果需要,我可以将大括号更改为完全不同的东西。
我有一个简单的程序:
PROGRAM concatenate
CHARACTER::char*11,name*4
CHARACTER(20)::charname
char='hello there'
name='Fred'
WRITE(*,*) char
WRITE(*,*) name
charname = char // ', ' // name
WRITE(*,*) charname
END PROGRAM
Run Code Online (Sandbox Code Playgroud)
假设我不想提前指定变量charname的长度,因此其长度由char和name的长度自动确定.我可以在Fortran中这样做吗?
谢谢
我有一个9个元素的列表.前三个代表位置,下一个速度,下一个力量.
有时我需要阵列中的力,其他时间速度,以及其他时间位置.
所以我写了一个函数如下:
def Extractor(alist,quantity):
if quantity=='positions':
x = alist[0]
y = alist[1]
z = alist[2]
return (x,y,z)
elif quantity=='velocities':
vx = alist[3]
vy = alist[4]
vz = alist[5]
tot_v = np.sqrt(vx**2 + vy**2 + vz**2)
return (vx,vy,vz,tot_v)
elif quantity=='forces':
fx = alist[6]
fy = alist[7]
fz = alist[8]
tot_f = np.sqrt(fx**2 + fy**2 + fz**2)
return (fx,fy,fz,tot_f)
else:
print "Do not recognise quantity: not one of positions, velocities, force"
Run Code Online (Sandbox Code Playgroud)
但是,由于代码重复,这似乎是一个巨大的代码味道.是否有更好,更pythonic的方式来做到这一点?我对OOP很新,但是我可以使用某种类继承来利用多态吗?
我经常遇到这样的情况:
import os
for i in range(10):
os.mkdir(i)
Run Code Online (Sandbox Code Playgroud)
但是,有时一个目录已经存在,在这种情况下,os.mkdir会抛出一个OSError.当发生这种情况时,我只是希望它跳过循环的其余部分并移动到i的下一次迭代,所以我经常写这样的东西:
for i in range(10):
try:
os.mkdir(i)
except OSError:
continue
Run Code Online (Sandbox Code Playgroud)
但是,我真正想要的是一个封装该行为的函数.像这样的东西:
def custom_mkdir(directory):
try:
os.mkdir(directory)
except OSError:
continue
Run Code Online (Sandbox Code Playgroud)
所以我可以有这样的代码:
for i in range(10):
custom_mkdir(i)
Run Code Online (Sandbox Code Playgroud)
具有预期的行为,如果目录不存在,它会跳转到for循环的下一个交互,如果它存在的话.
但是,continue语句不能以这种方式包含在函数中.那么如何在不诉诸的情况下获得预期的行为:
for i in range(10):
try:
custom_mkdir(i)
except OSError:
continue
Run Code Online (Sandbox Code Playgroud)
哪个比第一个更糟?