我想要一个长列表,例如[1,2,3,4,5,15,16,17,18,19].要初始化这个,我尝试输入:
new_list = [range(1,6),range(15,20)]
Run Code Online (Sandbox Code Playgroud)
然而,这不符合我的要求,返回:
[[1, 2, 3, 4, 5], [15, 16, 17, 18, 19]]
Run Code Online (Sandbox Code Playgroud)
当我做:
len(new_list)
Run Code Online (Sandbox Code Playgroud)
它返回2,而不是我想要的10个元素(因为它在列表中创建了2个列表).显然在这个例子中我可以输入我想要的内容,但我正在尝试为一些奇怪的迭代列表执行此操作,如下所示:
new_list = [range(101,6284),8001,8003,8010,range(10000,12322)]
Run Code Online (Sandbox Code Playgroud)
需要1-D列表而不是列表列表(或者最好调用的列表).我猜这真的很容易,而且我很想念它,但经过相当多的搜索后,我没有想出任何有用的东西.有任何想法吗?
我有一个问题,我曾试图询问过,但没有走远,并找到了新的信息,我希望得到更多的帮助.代码是混合MPI/ OPENMP代码,当尝试跨多个节点运行时会因分段错误而崩溃(尽管如果它仅在一个节点上执行,则是有效的,即主进程产生的节点).问题中有静态数组,我发现如果静态数组"太大"会导致seg错误,但如果它们"小"则一切运行正常.我还将代码转换为动态内存分配作为测试,这解决了问题......无论大小(即使在静态世界中失败的大型代码),代码也可以很好地完成.这个解决方案不是一个长期的解决方案,因为测试代码只是......一个测试代码,有一个更大的代码表现出相同的行为并且将其更改为动态不是一个选项.我需要确定导致静态数组seg故障情况的原因.
基本上,静态分配和动态分配内存的处理方式有何区别?什么(超出我试过的东西)我应该试着超越这个?我相信这个问题是相关的系统设定,大概一说,只有当作业将在MPICH2通过违反,但是当登录到节点(所以为什么它可以运行在我当前登录到节点罚款)是没有问题的.
在我的.bashrc文件中,我有" ulimit -s unlimited"," export OMP_STACKSIZE=4g"和" export KMP_STACKSIZE=4G"因为我正在使用ifort编译器.我相信这一定是一个相对简单的修复方法,但我无法通过它来实现.
如果需要违反程序源代码我可以发送出去,但我认为这里给出的描述涵盖了问题,请告诉我.
请查看以下代码示例.
$ct=5;
print "hey $ct+1";
Run Code Online (Sandbox Code Playgroud)
评估时,返回:
hey 5+1
Run Code Online (Sandbox Code Playgroud)
但是,我正在尝试返回代码:
hey 6
Run Code Online (Sandbox Code Playgroud)
有没有人知道我是否可以进行某种评估调用以使这种情况正确发生,或者是一种改变语法的方法?我知道我可以做到:
$dum=$ct+1;
print "hey $dum";
Run Code Online (Sandbox Code Playgroud)
但是我向你展示的是一个更复杂的简单版本.如果我能让这个小例子正常工作,我的大问题就解决了.谢谢.
我正在尝试以最有效(意味着最快)的方式将数组信息转换为列表.
我有一个名为node_map的列表,我希望将其作为字典的键,然后是我想与node_map关联的node_coordinates(node_coords_tmp)的3D数组.
Node_map看起来像:
[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
最初打印时报告Node_coords为:
(<exodus.c_double_Array_8352100 object at 0x2c2d8c0>, <exodus.c_double_Array_8352100 object at 0x2c2d5f0>, <exodus.c_double_Array_8352100 object at 0x2c2d560>)
Run Code Online (Sandbox Code Playgroud)
最初我填写了这样的字典:
for ct,i in enumerate(node_map):
node_coords[i] = [node_coords_tmp[0][ct],node_coords_tmp[1][ct],node_coords_tmp[2][ct]]
Run Code Online (Sandbox Code Playgroud)
这样做了我想要的,但是比我想要的数组的大小要慢.有没有更好的方法来使用numpy或不同的形式?谢谢.
如何循环一系列整数,将一个字符串(例如"array")与循环的迭代连接起来,并用结果字符串初始化一个列表?以下单行显示了我想要做的事情,我在哪里得到"无法分配给函数调用"错误.
for i in range(int(nmat)): eval('array'+str(i)) = []
Run Code Online (Sandbox Code Playgroud)
同时,在代码中进一步向下接受以下代码(前提是我注释掉了导致它炸弹的前面的代码)
eval('array'+str(ct1)).append(array[1:9])
Run Code Online (Sandbox Code Playgroud)
但是它告诉我名称'array0'是未定义的(因为我不知道如何以这种方式初始化一系列列表).非常感谢帮助,谢谢.