Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python bash在向量元素上执行函数_Python_Bash_Vector - Fatal编程技术网

Python bash在向量元素上执行函数

Python bash在向量元素上执行函数,python,bash,vector,Python,Bash,Vector,我有一个bash脚本,它生成集群上运行作业的向量。例如: Vector = [1.cluster 2.cluster 3.cluster] 我需要更新此脚本以保留此作业的记录。通常我会: qstat jobnumber.cluster 我的背景是python,在python中,我可以做如下工作: map(qstat, Vector) 这将返回一个向量,函数返回所有向量项的值。所以问题是:我可以在bash中将一个函数应用于一个向量并得到一个向量吗?下面是与Pythonic代码result=[

我有一个bash脚本,它生成集群上运行作业的向量。例如:

Vector = [1.cluster 2.cluster 3.cluster]
我需要更新此脚本以保留此作业的记录。通常我会:

qstat jobnumber.cluster
我的背景是python,在python中,我可以做如下工作:

map(qstat, Vector)

这将返回一个向量,函数返回所有向量项的值。所以问题是:我可以在bash中将一个函数应用于一个向量并得到一个向量吗?

下面是与Pythonic代码
result=[qstat(cluster)for cluster in vector]
相当的bash代码

如果您使用的是bash数组:

result=() # or declare -a result
for cluster in ${Vector[@]}; do
  result=("${result[@]}" "$(qstat $cluster)") # or result+=($(qstat $cluster))
done
两种附加到数组的方法的区别在于,第一种方法显式扩展数组以添加新元素,而第二种方法使用新元素创建新数组以将其添加到末尾。这是因为bash没有与Python的
extend
方法等价的方法

如果您使用的是IFS分隔字符串:

result=""
for cluster in $Vector; do
  result="${result} $(qstat cluster)"
done

不,Bash没有
map
函数将函数应用于数组中的每个元素,从而返回一个数组。您可以使用
for
循环手动执行此操作:

declare -a results
for job in "${jobs[@]}"
do
    results+=($(qstat $job))
done

您是通过
Vector=(1.cluster 2.cluster 3.cluster)
还是
Vector=1.cluster 2.cluster 3.cluster
?换句话说,
echo${Vector[0]}
是否打印
1.cluster
1.cluster 2.cluster 3.cluster
?向量是通过附加其他命令(输出:Job+=$Command)创建的,因此
$Command
是另一个数组变量吗?另外,您的第一行既不是有效的Python(在
list
成员之间需要逗号),也不是bash(将数组放在paren中,而不是括号中,并且不能有额外的空格)。两个都没有所谓的“向量”。如果您使用正确的术语和实际的工作代码,而不是类似的东西,您将得到更好的答案。