我知道这里已经涵盖了类似的主题,但是我遇到了一个问题,我认为这是因为我误解了如何在foreach循环的上下文中插入数组切片.我无法弄清楚我哪里出错,所以我正在寻找一些见解.
我有一个行数可变的二维数组.例如:
@2DArray = (['str1', 1, 2, 'E', val1, val2, val3]
['str2', 3, 4, 'E', val4, val5, val6]
['str4', 5, 6, 'F', val7, val8, val9])
Run Code Online (Sandbox Code Playgroud)
我想构建一个带有附加列的新数组,只有当它们在第3列中包含字符串'E'时才包含原始数组的一些行.另外,对于我希望在我的新数组中包含的行,我只想要列的一个子集,我希望该子集的顺序不同.最终目标是生成下游脚本所需的正确格式的输出.
这是我尝试这样做的:
my $projName = 'test';
my $i = 1;
my @Newarray
my @Newarray_element;
foreach (@2DArray) {
if (${$_}[3] eq 'E') {
${$_}[3] = $i;
${$_}[5] = '+';
@Newarray_element = ("$projName$i", @$_[0,1,2,5,3], 'STR', 11, 11);
$i++;
push (@Newarray, \@Newarray_element);
}
next;
}
print (join("\t", @$_), "\n") for @Newarray;
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,我得到的是:
#(original) col nums: 0 1 2 …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Python项目,我希望与已编写的C++包接口.由于我将在本项目的其他部分使用Cython,我更喜欢使用Cython进行换行.
简而言之,我需要包装一个返回自定义类型Bar对象的函数FooBar.
这是Bar.h:
#include <cstddef> // For size_t
#include <vector>
/* data returned by function FooBar()*/
class Bar {
public:
size_t X;
std::vector<size_t> Y;
std::vector<double> Z;
std::vector<double> M;
std::vector<size_t> N;
};
Bar FooBar(const std::vector<double> & O, size_t P, size_t Q);
Run Code Online (Sandbox Code Playgroud)
和PyBar.pyx:
from libcpp.vector cimport vector
cdef extern from "Bar.h":
cdef cppclass Bar:
size_t X
vector[size_t] Y
vector[double] Z
vector[double] M
vector[size_t] N
cdef Bar FooBar(const vector[double] & O, size_t P, size_t Q)
cdef class PyBar:
cdef Bar *thisptr # hold …Run Code Online (Sandbox Code Playgroud)