假设我们有一个 pandas 数据框:
name age sal
0 Alex 20 100
1 Jane 15 200
2 John 25 300
3 Lsd 23 392
4 Mari 21 380
Run Code Online (Sandbox Code Playgroud)
假设现在删除了几行,但我们不知道已删除的索引。例如,我们使用 删除行索引 1 df.drop([1])。现在数据框可以归结为:
fname age sal
0 Alex 20 100
2 John 25 300
3 Lsd 23 392
4 Mari 21 380
Run Code Online (Sandbox Code Playgroud)
我想从行索引 3 和列“年龄”获取值。它应该返回 23。我该怎么做?
df.iloc[3, df.columns.get_loc('age')]不起作用,因为它将返回 21。我猜 iloc 采用连续行索引?
假设我有两个结构来自不同的头文件:
header_1.h
struct main_node {
struct *sec_node
}
Run Code Online (Sandbox Code Playgroud)
header_2.h
struct sec_node {
int var;
}
Run Code Online (Sandbox Code Playgroud)
现在我使用这两个头文件,main.c代码看起来像这样:
#include <stdio.h>
#include "header_1.h"
#include "header_2.h"
struct main_node *node;
void main()
{
for (int i = 0; i < 1000; i++)
printf( "%d\n", node->sec_node->var) ;
}
Run Code Online (Sandbox Code Playgroud)
我们假设,我没有使用现代优化编译器.我循环了struct很多次,在这里使用临时变量会更快/更好吗?
在C中,性能方面有什么不同吗?
void main()
{
int temp = node->sec_node->var;
for (int i = 0; i < 1000; i++)
printf( "%d\n", temp);
}
Run Code Online (Sandbox Code Playgroud) 我遇到过这段代码,我不知道该怎么#reg做:
#define FPGA_WRITE(reg,val) do { printf("%-20s %08X <<- %08lX\n", #reg, (reg), (unsigned long)(val));} while (0)
int main()
{
FPGA_WRITE(10,15);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这打印出以下内容:
10 0000000A <<- 0000000F
Run Code Online (Sandbox Code Playgroud)
如果我取出#,我在执行代码时会遇到段错误.奇怪.有什么用#?
我们来看看这个例子:
static FILE *open_file(const char *file_path)
{
char buf[80];
size_t n = snprintf(buf, sizeof (buf), "%s", file_path);
assert(n < sizeof (buf));
return fopen(buf, "r");
}
Run Code Online (Sandbox Code Playgroud)
在这里,它assert()是一个接一个.从联机帮助页snprintf:
"成功返回后,这些函数返回打印的字符数(不包括用于结束输出到字符串的空字节)."
因此,如果它返回80,则字符串将填充缓冲区,并且不会被\ 0终止.这将导致问题,因为fopen()假设它是空终止.
防止这种情况的最佳方法是什么?