如果我想检查一个字符串是否有用括号,我可以使用这个简单的代码:
int counter = 0;
for(int i = 0; i < length_of_string; i++){
if(string[i] == '(' )
counter++;
else if(string[i] == ')' ) // string is a char array
counter--;
if(counter < 0)
return -1; // error because the ')' should come AFTER '('
}
if(counter == 0)
return 0; // the string is OK
else
return -1; // unbalanced
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 我认为这段代码做得很好,但我看到一些使用堆栈的实现.这是为什么?使用堆栈是否能够处理更详细的案例?
我有一个脚本,我必须为其设置一个特定的 virtualenv。
#!/usr/bin/env python / python3 / python3.6如果脚本运行时 virtualenv 未打开,则运行脚本不会切断它,所以我做了这样的事情:
#!/home/bla/bla2/bla3/venv/bin/python
import virtualenv stuff...
Run Code Online (Sandbox Code Playgroud)
我假设
鉴于这两个假设,这是一个好主意吗?如果不是,什么会更好?我不愿意有一个包装 bash 脚本来打开 venv 然后调用我的脚本
在阅读Michael Driscoll的Python 101时,我得到了关于检查字典中是否存在密钥的解释.我在我的机器上检查了它,其中包含一个字典,其中包含值为其顺序的键,以及一个测量检索键时间的函数(随机选取)'a''z''t'
这是我的功能:
def f(d, flag):
start_time = time.time()
if flag:
print("t" in d)
else:
print("t" in d.keys())
print("--- %s seconds ---" % (time.time() - start_time))
Run Code Online (Sandbox Code Playgroud)
以下是结果:
>>> f(dict,True)
True
--- 0.03937530517578125 seconds ---
>>> f(dict,False)
True
--- 0.05114388465881348 seconds ---
Run Code Online (Sandbox Code Playgroud)
但是,我仍然没有得到它.我认为这key in dict.keys()将导致迭代更小的集合,这将更快.是否有一些特殊的实施in或keys()导致这种情况?
我正在使用 MS Visual Studio 2008 进行 C 编码。
我知道我们可以使用“ int system(const char *command)”来执行命令。
有没有其他方法可以在C程序中执行系统命令。我还需要将执行命令的输出存储在变量中。
system()函数执行命令并将输出发送到stdout,有什么方法可以读取stdout变量并将其存储在变量中。
所以我的最终目标是在 Windows 的 C 程序中执行系统命令(使用 Visual Studio)并将该命令的输出存储在变量中。有什么建议 ?
我有一个开关案例有4个案例具有相同的通用代码,但我需要为它们不同地初始化变量:
int a,b,c;
switch(type)
{
case A:
case B:
case C:
case D:
foo(a,b,c);
}
Run Code Online (Sandbox Code Playgroud)
我目前所拥有的是一些a = type == A ? 1 : 2;复杂的变量:
if(type == A)
b = 1;
else if(type == B)
b = 5;
else
b = 2;
Run Code Online (Sandbox Code Playgroud)
这有效,但在我看来看起来很难看,而且不是很流利.我可以完全划分案例,但我想在我的代码中避免复制粘贴.
我希望做的是:
int a,b,c;
switch(type)
{
case A:
a = 1;
b = 1;
case B:
a = 2;
b = 5;
case C:
case D:
a = 1;
b = 2;
foo(a,b,c);
}
Run Code Online (Sandbox Code Playgroud)
但这显然不会起作用,因为case D …
据我所知,工会是一种将内存块用于多种用途的方法.在我们的日子里,有没有理由使用工会,那里的记忆不是问题?
显然,我的问题并不是考虑使用可以在某些小型嵌入式设备上找到的有限硬件.
我有一个变量列表 char [][20] ls = {"var_1", "var_2", ... , ""}
这是结构字段的名称 struct {char var1[10], ...} my_struct;
结构中的变量都有char[]不断变化的长度.列表本身是const,不应在运行中期间更改.
我想以一种通用的方式在循环中访问这些变量.而不是打电话myfunc(my_struct.var1); myfunc(my_struct.var2);等等,我宁愿:
for (char * p = ls[0]; *p; p += sizeof(ls[0]))
{
myfunc(my_struct.{some magic that would put var_1 / var_2 here});
}
Run Code Online (Sandbox Code Playgroud)
但我想这是不可能的,因为循环在运行时执行,变量名需要在编译时可用.
我是正确的还是可以在这里完成的事情?(不一定要这样,只是想知道我是否可以把这个例程打包成一个很好的循环)
我有两个字符串要比较,我认为使用strncmp会比使用更好,strcmp因为我知道其中一个字符串长度.
char * a = "hel";
char * b = "he"; // in my real code this is scanned so it user dependent
for(size_t i = 0; i < 5; i++){
printf("strncmp: %d\n", strncmp(a,b,i));
}
Run Code Online (Sandbox Code Playgroud)
我期待输出
0
0
0
1 // which is the output of printf("strcmp: %d\n", strncmp(a,b));
1
Run Code Online (Sandbox Code Playgroud)
因为只在第4次迭代(i = 3)中,字符串开始不同,但我得到了
0
0
0
108 // guessing this is due to 'l' == 108 in ascii
108
Run Code Online (Sandbox Code Playgroud)
我不明白为什么,正如男人所说:
该
strcmp() …
我正在使用这个答案来了解如何使用pandas.
使用的建议pd.read_csv('./input/test.csv' , iterator=True, chunksize=1000)效果很好,但它返回一个<class 'pandas.io.parsers.TextFileReader'>,所以我将其转换为数据帧,pd.concat(pd.read_csv('./input/test.csv' , iterator=True, chunksize=25))但这需要与首先读取文件一样多的时间!
关于如何快速读取文件的一部分有什么建议吗?
根据此,我可以调用一个函数,N个参数与含有这些参数的元组,具有f(*my_tuple)。
有没有办法结合解包和解包变量?
就像是:
def f(x,y,z):...
a = (1,2)
f(*a, 3)
Run Code Online (Sandbox Code Playgroud) c ×6
python ×4
algorithm ×1
dictionary ×1
pandas ×1
performance ×1
python-2.7 ×1
python-3.x ×1
strncmp ×1
unions ×1
virtualenv ×1