我正在测试一个列表,看看它是否为空.通常我使用len(list)== 0,我隐约记得刚读过一段时间来测试列表是否为空的正确方法是它是真还是假.
所以我试过list是False,那返回False.也许我想要使用==?不,那也是假的.list为True,返回false,如list == True.
现在我很困惑所以我做了一个快速谷歌并最终:最好的方法来检查列表是否为空
最佳答案是:
if not a:
print "List is empty"
Run Code Online (Sandbox Code Playgroud)
所以我搜索更多内容并最终在python手册中,其中4.1声明:
可以测试任何对象的真值,用于if或while条件或作为下面布尔运算的操作数.以下值被视为false:
任何空序列,例如'',(),[].
现在我很困惑.如果我测试列表就好像不是列表,它可以正常工作.但是如果一个空列表是假的,那么为什么我不能这样做,如果list是False或者list == False?
谢谢
基本上我正在尝试运行一些代码(Python 3.2),如果网站上的值发生变化,否则稍等一会儿再检查一下.
首先,我想我可以将值保存在变量中,并将其与下次运行脚本时获取的新值进行比较.但是,当脚本再次运行并初始化该变量时,值会被覆盖,这很快就会遇到问题.
那么我尝试将网页的html保存为文件,然后将其与下次运行脚本时调用的html进行比较.那里没有运气,因为即使没有变化,它仍然会出现错误.
接下来是腌制网页,然后尝试将其与html进行比较.有趣的是,这在脚本中都不起作用.但是,如果我在脚本运行后键入file = pickle.load(打开('D:\ Download\htmlString.p','rb')),然后输入file == html,则在没有脚本时显示True任何变化.
我有点困惑的是,为什么它在脚本运行时不起作用,但如果我这样做,它会显示正确的答案.
编辑:感谢你们迄今为止的回复.我的问题并不是关于其他方法(尽管学习更多方法来完成任务总是好的!)而是为什么下面的代码在作为脚本运行时不起作用,但如果我在脚本运行后在提示符处重新加载pickle对象,然后针对html测试它,如果没有任何更改,它将返回True.
try:
file = pickle.load( open( 'D:\\Download\\htmlString.p', 'rb'))
if pickle.load( open( 'D:\\Download\\htmlString.p', 'rb')) == htmlString:
print("Values haven't changed!")
sys.exit(0)
else:
pickle.dump( htmlString, open( 'D:\\Download\\htmlString.p', "wb" ) )
print('Saving')
except:
pickle.dump( htmlString, open( 'D:\\Download\\htmlString.p', "wb" ) )
print('ERROR')
Run Code Online (Sandbox Code Playgroud) 我一直在试图弄清楚如何将包含多个值的多个元组添加到字典中的单个键.但到目前为止没有成功.我可以将值添加到元组或列表,但我无法弄清楚如何添加元组,以便键现在有2个包含值的元组,而不是一个包含所有元组的元组.
比如说词典= {'Key1':(1.000,2.003,3.0029)}
我想添加(2.3232,13.5232,1325.123)
以便最终得到:
dictionary = {'Key1':((1.000,2.003,3.0029),(2.3232,13.5232,1325.123))}
(忘了一组括号!)
如果有人知道如何做到这一点,我会很感激帮助,因为它现在真的开始惹恼我了.
谢谢!
编辑:谢谢大家!讽刺我试过,除了当时我试图使值多个列表而不是多个元组; 当解决方案只是将元组括在列表中时.讽刺啊.
我试图获取数组中所有元素的索引列表,所以对于1000 x 1000的数组,我最终得到[[0,0),(0,1),...,(999,999) ]。
我做了一个函数来做到这一点,如下所示:
def indices(alist):
results = []
ele = alist.size
counterx = 0
countery = 0
x = alist.shape[0]
y = alist.shape[1]
while counterx < x:
while countery < y:
results.append((counterx,countery))
countery += 1
counterx += 1
countery = 0
return results
Run Code Online (Sandbox Code Playgroud)
我给它计时后,它似乎很慢,因为它大约需要650毫秒才能运行(在慢速笔记本电脑上可以使用)。因此,考虑到numpy必须比平庸的编码更快地执行此操作,我看了看文档并尝试:
indices = [k for k in numpy.ndindex(q.shape)]
which took about 4.5 SECONDS (wtf?)
indices = [x for x,i in numpy.ndenumerate(q)]
better, but 1.5 seconds!
Run Code Online (Sandbox Code Playgroud)
有更快的方法吗?
谢谢
所以我决定学习C并用艰难的方式学习c.无论如何,我尝试编辑其中一个示例,输出不是我预期的结果.我从命令行调用程序为e14 asd"应该"打印:'e'== 101'a'== 97's'== 115'd'== 100
但是,它根本不打印'd'行.我的代码是:
#include <stdio.h>
#include <ctype.h>
void print_letters(int argc, char *arg[])
{
int i = 0;
int j = 0;
for(j = 0; j < argc; j++) {
for(i = 0; arg[i] != '\0'; i++) {
char ch = arg[j][i];
printf("j is %d and i is %d\n", j, i);
if(isalpha(ch) || isblank(ch)) {
printf("'%c' == %d \n", ch, ch);
}
}
printf("\n");
}
}
int main(int argc, char *argv[])
{
print_letters(argc, argv);
return 0;
} …
Run Code Online (Sandbox Code Playgroud)