• 关于 python布尔 的搜索结果

问题

刚开始学python。关于布尔表达式,总是报错?报错

爱吃鱼的程序员 2020-06-22 17:40:25 0 浏览量 回答数 1

回答

int在python里是一个类,它是不可变数据类型中的一种,它的一些性质和字符串是一样的,是整型。Python int数字类型:整型int、长整型、布尔型bool、浮点数float、复数complex。整型int的创建:创建一个新整型变量和给变量赋值是相同的过程。整型的特点:既然是整型自然赋值时候的数据要是整数才行,整数简单理解为(正整数和负整数)。整型变量间的运算操作符及方法:python目前可以支持的整型数据类型变量前的操作符有加(+)、减(-)、乘()、除(/)和幂(*)。Python简介:Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议,Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。

世事皆空 2019-12-02 01:08:01 0 浏览量 回答数 0

回答

bool是python中的数字类型即布尔

游客aasf2nc2ujisi 2019-12-02 03:23:25 0 浏览量 回答数 0

新用户福利专场,云服务器ECS低至96.9元/年

新用户福利专场,云服务器ECS低至96.9元/年

问题

【精品问答】Python字符串面试知识点50问

珍宝珠 2019-12-01 22:06:38 25 浏览量 回答数 0

回答

int在python里是一个类,它是不可变数据类型中的一种,它的一些性质和字符串是一样的,是整型。Python int数字类型:整型int、长整型、布尔型bool、浮点数float、复数complex。整型int的创建:创建一个新整型变量和给变量赋值是相同的过程。整型的特点:既然是整型自然赋值时候的数据要是整数才行,整数简单理解为(正整数和负整数)。整型变量间的运算操作符及方法:python目前可以支持的整型数据类型变量前的操作符有加(+)、减(-)、乘()、除(/)和幂(*)。希望我提供的答案能够帮助到你,答案满意还请采纳一下,谢谢。另外,你可以继续留言或者到论坛参与更多的互动。

大财主 2019-12-02 01:05:11 0 浏览量 回答数 0

回答

bool是python的布尔类型,即True False 真 和 假

游客aasf2nc2ujisi 2019-12-02 03:11:53 0 浏览量 回答数 0

回答

许多Python初学者都会问:我应该学习哪个版本的Python。对于这个问题,我的回答通常是“先选择一个最适合你的Python教程,教程中使用哪个版本的Python,你就用那个版本。等学得差不多了,再来研究不同版本之间的差别”。 许多Python初学者都会问:我应该学习哪个版本的Python。对于这个问题,我的回答通常是“先选择一个最适合你的Python教程,教程中使用哪个版本的Python,你就用那个版本。等学得差不多了,再来研究不同版本之间的差别”。但如果想要用Python开发一个新项目,那么该如何选择Python版本呢?我可以负责任的说,大部分Python库都同时支持Python 2.7.x和3.x版本的,所以不论选择哪个版本都是可以的。但为了在使用Python时避开某些版本中一些常见的陷阱,或需要移植某个Python项目时,依然有必要了解一下Python两个常见版本之间的主要区别。__future__模块Python 3.x引入了一些与Python 2不兼容的关键字和特性,在Python 2中,可以通过内置的__future__模块导入这些新内容。如果你希望在Python 2环境下写的代码也可以在Python 3.x中运行,那么建议使用__future__模块。例如,如果希望在Python 2中拥有Python 3.x的整数除法行为,可以通过下面的语句导入相应的模块。from future import division 下表列出了__future__中其他可导入的特性:特性 可选版本 强制版本 效果nested_scopes 2.1.0b1 2.2 PEP 227:Statically Nested Scopesgenerators 2.2.0a1 2.3 PEP 255:Simple Generatorsdivision 2.2.0a2 3.0 PEP 238:Changing the Division Operatorabsolute_import 2.5.0a1 3.0 PEP 328:Imports: Multi-Line and Absolute/Relativewith_statement 2.5.0a1 2.6 PEP 343:The “with” Statementprint_function 2.6.0a2 3.0 PEP 3105:Make print a functionunicode_literals 2.6.0a2 3.0 PEP 3112:Bytes literals in Python 3000(来源: https://docs.python.org/2/library/future.html)示例:from platform import python_version print函数虽然print语法是Python 3中一个很小的改动,且应该已经广为人知,但依然值得提一下:Python 2中的print语句被Python 3中的print()函数取代,这意味着在Python 3中必须用括号将需要输出的对象括起来。在Python 2中使用额外的括号也是可以的。但反过来在Python 3中想以Python2的形式不带括号调用print函数时,会触发SyntaxError。Python 2print 'Python', python_version() print 'Hello, World!' print('Hello, World!') print "text", ; print 'print more text on the same line' Python 2.7.6 Hello, World! Hello, World! text print more text on the same line Python 3print('Python', python_version()) print('Hello, World!') print("some text,", end="") print(' print more text on the same line') Python 3.4.1 Hello, World! some text, print more text on the same line print 'Hello, World!' File "", line 1 print 'Hello, World!' ^ SyntaxError: invalid syntax 注意:在Python中,带不带括号输出”Hello World”都很正常。但如果在圆括号中同时输出多个对象时,就会创建一个元组,这是因为在Python 2中,print是一个语句,而不是函数调用。print 'Python', python_version() print('a', 'b') print 'a', 'b' Python 2.7.7 ('a', 'b') a b 整数除法由于人们常常会忽视Python 3在整数除法上的改动(写错了也不会触发Syntax Error),所以在移植代码或在Python 2中执行Python 3的代码时,需要特别注意这个改动。所以,我还是会在Python 3的脚本中尝试用float(3)/2或 3/2.0代替3/2,以此来避免代码在Python 2环境下可能导致的错误(或与之相反,在Python 2脚本中用from future import division来使用Python 3的除法)。Python 2print 'Python', python_version() print '3 / 2 =', 3 / 2 print '3 // 2 =', 3 // 2 print '3 / 2.0 =', 3 / 2.0 print '3 // 2.0 =', 3 // 2.0 Python 2.7.6 3 / 2 = 1 3 // 2 = 1 3 / 2.0 = 1.5 3 // 2.0 = 1.0 Python 3print('Python', python_version()) print('3 / 2 =', 3 / 2) print('3 // 2 =', 3 // 2) print('3 / 2.0 =', 3 / 2.0) print('3 // 2.0 =', 3 // 2.0) Python 3.4.1 3 / 2 = 1.5 3 // 2 = 1 3 / 2.0 = 1.5 3 // 2.0 = 1.0 UnicodePython 2有基于ASCII的str()类型,其可通过单独的unicode()函数转成unicode类型,但没有byte类型。而在Python 3中,终于有了Unicode(utf-8)字符串,以及两个字节类:bytes和bytearrays。Python 2print 'Python', python_version() Python 2.7.6 print type(unicode('this is like a python3 str type')) print type(b'byte type does not exist') print 'they are really' + b' the same' they are really the same print type(bytearray(b'bytearray oddly does exist though')) Python 3print('Python', python_version()) print('strings are now utf-8 u03BCnicou0394é!') Python 3.4.1 strings are now utf-8 μnicoΔé! print('Python', python_version(), end="") print(' has', type(b' bytes for storing data')) Python 3.4.1 has print('and Python', python_version(), end="") print(' also has', type(bytearray(b'bytearrays'))) and Python 3.4.1 also has 'note that we cannot add a string' + b'bytes for data' TypeError Traceback (most recent call last) in () ----> 1 'note that we cannot add a string' + b'bytes for data' TypeError: Can't convert 'bytes' object to str implicitly xrange在Python 2.x中,经常会用xrange()创建一个可迭代对象,通常出现在“for循环”或“列表/集合/字典推导式”中。这种行为与生成器非常相似(如”惰性求值“),但这里的xrange-iterable无尽的,意味着可能在这个xrange上无限迭代。由于xrange的“惰性求知“特性,如果只需迭代一次(如for循环中),range()通常比xrange()快一些。不过不建议在多次迭代中使用range(),因为range()每次都会在内存中重新生成一个列表。在Python 3中,range()的实现方式与xrange()函数相同,所以就不存在专用的xrange()(在Python 3中使用xrange()会触发NameError)。import timeit n = 10000 def test_range(n): return for i in range(n): pass def test_xrange(n): for i in xrange(n): pass Python 2print 'Python', python_version() print 'ntiming range()' %timeit test_range(n) print 'nntiming xrange()' %timeit test_xrange(n) Python 2.7.6 timing range() 1000 loops, best of 3: 433 µs per loop timing xrange() 1000 loops, best of 3: 350 µs per loop Python 3print('Python', python_version()) print('ntiming range()') %timeit test_range(n) Python 3.4.1 timing range() 1000 loops, best of 3: 520 µs per loop print(xrange(10)) NameError Traceback (most recent call last) in () ----> 1 print(xrange(10)) NameError: name 'xrange' is not defined Python 3中的range对象中的__contains__方法另一个值得一提的是,在Python 3.x中,range有了一个新的__contains__方法。__contains__方法可以有效的加快Python 3.x中整数和布尔型的“查找”速度。x = 10000000 def val_in_range(x, val): return val in range(x) def val_in_xrange(x, val): return val in xrange(x) print('Python', python_version()) assert(val_in_range(x, x/2) == True) assert(val_in_range(x, x//2) == True) %timeit val_in_range(x, x/2) %timeit val_in_range(x, x//2) Python 3.4.1 1 loops, best of 3: 742 ms per loop 1000000 loops, best of 3: 1.19 µs per loop 根据上面的timeit的结果,查找整数比查找浮点数要快大约6万倍。但由于Python 2.x中的range或xrange没有__contains__方法,所以在Python 2中的整数和浮点数的查找速度差别不大。print 'Python', python_version() assert(val_in_xrange(x, x/2.0) == True) assert(val_in_xrange(x, x/2) == True) assert(val_in_range(x, x/2) == True) assert(val_in_range(x, x//2) == True) %timeit val_in_xrange(x, x/2.0) %timeit val_in_xrange(x, x/2) %timeit val_in_range(x, x/2.0) %timeit val_in_range(x, x/2) Python 2.7.7 1 loops, best of 3: 285 ms per loop 1 loops, best of 3: 179 ms per loop 1 loops, best of 3: 658 ms per loop 1 loops, best of 3: 556 ms per loop 下面的代码证明了Python 2.x中没有__contain__方法:print('Python', python_version()) range.__contains__ Python 3.4.1 print('Python', python_version()) range.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last) in () 1 print 'Python', python_version() ----> 2 range.__contains__ AttributeError: 'builtin_function_or_method' object has no attribute '__contains__' print('Python', python_version()) xrange.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last) in () 1 print 'Python', python_version() ----> 2 xrange.__contains__ AttributeError: type object 'xrange' has no attribute '__contains__' 关于Python 2中xrange()与Python 3中range()之间的速度差异的一点说明:有读者指出了Python 3中的range()和Python 2中xrange()执行速度有差异。由于这两者的实现方式相同,因此理论上执行速度应该也是相同的。这里的速度差别仅仅是因为Python 3的总体速度就比Python 2慢。def test_while(): i = 0 while i < 20000: i += 1 return print('Python', python_version()) %timeit test_while() Python 3.4.1 %timeit test_while() 100 loops, best of 3: 2.68 ms per loop print 'Python', python_version() %timeit test_while() Python 2.7.6 1000 loops, best of 3: 1.72 ms per loop 触发异常Python 2支持新旧两种异常触发语法,而Python 3只接受带括号的的语法(不然会触发SyntaxError):Python 2print 'Python', python_version()Python 2.7.6 raise IOError, "file error" IOError Traceback (most recent call last) in ()----> 1 raise IOError, "file error" IOError: file error raise IOError("file error") IOError Traceback (most recent call last) in ()----> 1 raise IOError("file error") IOError: file errorPython 3print('Python', python_version())Python 3.4.1raise IOError, "file error"File "", line 1raise IOError, "file error"^SyntaxError: invalid syntaxThe proper way to raise an exception in Python 3:print('Python', python_version())raise IOError("file error")Python 3.4.1 OSError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 raise IOError("file error") OSError: file error异常处理Python 3中的异常处理也发生了一点变化。在Python 3中必须使用“as”关键字。Python 2print 'Python', python_version()try: let_us_cause_a_NameError except NameError, err: print err, '--> our error message' Python 2.7.6name 'let_us_cause_a_NameError' is not defined --> our error messagePython 3print('Python', python_version())try: let_us_cause_a_NameError except NameError as err: print(err, '--> our error message') Python 3.4.1name 'let_us_cause_a_NameError' is not defined --> our error messagenext()函数和.next()方法由于会经常用到next()(.next())函数(方法),所以还要提到另一个语法改动(实现方面也做了改动):在Python 2.7.5中,函数形式和方法形式都可以使用,而在Python 3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。Python 2print 'Python', python_version()my_generator = (letter for letter in 'abcdefg')next(my_generator)my_generator.next()Python 2.7.6'b'Python 3print('Python', python_version())my_generator = (letter for letter in 'abcdefg')next(my_generator)Python 3.4.1'a' my_generator.next() AttributeError Traceback (most recent call last) in ()----> 1 my_generator.next() AttributeError: 'generator' object has no attribute 'next'For循环变量与全局命名空间泄漏好消息是:在Python 3.x中,for循环中的变量不再会泄漏到全局命名空间中了!这是Python 3.x中做的一个改动,在“What’s New In Python 3.0”中有如下描述:“列表推导不再支持[… for var in item1, item2, …]这样的语法,使用[… for var in (item1, item2, …)]代替。还要注意列表推导有不同的语义:现在列表推导更接近list()构造器中的生成器表达式这样的语法糖,特别要注意的是,循环控制变量不会再泄漏到循环周围的空间中了。”Python 2print 'Python', python_version() i = 1print 'before: i =', i print 'comprehension: ', [i for i in range(5)] print 'after: i =', iPython 2.7.6before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 4Python 3print('Python', python_version()) i = 1print('before: i =', i) print('comprehension:', [i for i in range(5)]) print('after: i =', i)Python 3.4.1before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 1比较无序类型Python 3中另一个优秀的改动是,如果我们试图比较无序类型,会触发一个TypeError。Python 2print 'Python', python_version()print "[1, 2] > 'foo' = ", [1, 2] > 'foo'print "(1, 2) > 'foo' = ", (1, 2) > 'foo'print "[1, 2] > (1, 2) = ", [1, 2] > (1, 2)Python 2.7.6[1, 2] > 'foo' = False(1, 2) > 'foo' = True[1, 2] > (1, 2) = FalsePython 3print('Python', python_version())print("[1, 2] > 'foo' = ", [1, 2] > 'foo')print("(1, 2) > 'foo' = ", (1, 2) > 'foo')print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2)) Python 3.4.1 TypeError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 print("[1, 2] > 'foo' = ", [1, 2] > 'foo')3 print("(1, 2) > 'foo' = ", (1, 2) > 'foo')4 print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2))TypeError: unorderable types: list() > str()通过input()解析用户的输入幸运的是,Python 3改进了input()函数,这样该函数就会总是将用户的输入存储为str对象。在Python 2中,为了避免读取非字符串类型会发生的一些危险行为,不得不使用raw_input()代替input()。Python 2Python 2.7.6[GCC 4.0.1 (Apple Inc. build 5493)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) my_input = raw_input('enter a number: ') enter a number: 123 type(my_input) Python 3Python 3.4.1[GCC 4.2.1 (Apple Inc. build 5577)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) 返回可迭代对象,而不是列表在xrange一节中可以看到,某些函数和方法在Python中返回的是可迭代对象,而不像在Python 2中返回列表。由于通常对这些对象只遍历一次,所以这种方式会节省很多内存。然而,如果通过生成器来多次迭代这些对象,效率就不高了。此时我们的确需要列表对象,可以通过list()函数简单的将可迭代对象转成列表。Python 2print 'Python', python_version() print range(3)print type(range(3))Python 2.7.6[0, 1, 2]Python 3print('Python', python_version())print(range(3))print(type(range(3)))print(list(range(3)))Python 3.4.1range(0, 3)[0, 1, 2]下面列出了Python 3中其他不再返回列表的常用函数和方法:zip()map()filter()字典的.key()方法字典的.value()方法字典的.item()方法 __future__模块 [回到目录] Python 3.x引入了一些与Python 2不兼容的关键字和特性,在Python 2中,可以通过内置的__future__模块导入这些新内容。如果你希望在Python 2环境下写的代码也可以在Python 3.x中运行,那么建议使用__future__模块。例如,如果希望在Python 2中拥有Python 3.x的整数除法行为,可以通过下面的语句导入相应的模块。 ? 1 from future import division 下表列出了__future__中其他可导入的特性: 特性 可选版本 强制版本 效果 nested_scopes 2.1.0b1 2.2 PEP 227:Statically Nested Scopes generators 2.2.0a1 2.3 PEP 255:Simple Generators division 2.2.0a2 3.0 PEP 238:Changing the Division Operator absolute_import 2.5.0a1 3.0 PEP 328:Imports: Multi-Line and Absolute/Relative with_statement 2.5.0a1 2.6 PEP 343:The “with” Statement print_function 2.6.0a2 3.0 PEP 3105:Make print a function unicode_literals 2.6.0a2 3.0 PEP 3112:Bytes literals in Python 3000 (来源: https://docs.python.org/2/library/future.html) 示例: ? 1 from platform import python_version print函数 [回到目录] 虽然print语法是Python 3中一个很小的改动,且应该已经广为人知,但依然值得提一下:Python 2中的print语句被Python 3中的print()函数取代,这意味着在Python 3中必须用括号将需要输出的对象括起来。 在Python 2中使用额外的括号也是可以的。但反过来在Python 3中想以Python2的形式不带括号调用print函数时,会触发SyntaxError。 Python 2 ? 1234 print 'Python', python_version()print 'Hello, World!'print('Hello, World!')print "text", ; print 'print more text on the same line' ? 1234 Python 2.7.6Hello, World!Hello, World!text print more text on the same line Python 3 ? 12345 print('Python', python_version())print('Hello, World!') print("some text,", end="") print(' print more text on the same line') ? 123 Python 3.4.1Hello, World!some text, print more text on the same line ? 1 print 'Hello, World!' ? File "", line 1print 'Hello, World!'^SyntaxError: invalid syntax 注意: 在Python中,带不带括号输出”Hello World”都很正常。但如果在圆括号中同时输出多个对象时,就会创建一个元组,这是因为在Python 2中,print是一个语句,而不是函数调用。 ? 123 print 'Python', python_version()print('a', 'b')print 'a', 'b' Python 2.7.7('a', 'b')a b 整数除法 [回到目录] 由于人们常常会忽视Python 3在整数除法上的改动(写错了也不会触发Syntax Error),所以在移植代码或在Python 2中执行Python 3的代码时,需要特别注意这个改动。 所以,我还是会在Python 3的脚本中尝试用float(3)/2或 3/2.0代替3/2,以此来避免代码在Python 2环境下可能导致的错误(或与之相反,在Python 2脚本中用from future import division来使用Python 3的除法)。 Python 2 ? 12345 print 'Python', python_version()print '3 / 2 =', 3 / 2print '3 // 2 =', 3 // 2print '3 / 2.0 =', 3 / 2.0print '3 // 2.0 =', 3 // 2.0 Python 2.7.63 / 2 = 13 // 2 = 13 / 2.0 = 1.53 // 2.0 = 1.0 Python 3 ? 12345 print('Python', python_version())print('3 / 2 =', 3 / 2)print('3 // 2 =', 3 // 2)print('3 / 2.0 =', 3 / 2.0)print('3 // 2.0 =', 3 // 2.0) Python 3.4.13 / 2 = 1.53 // 2 = 13 / 2.0 = 1.53 // 2.0 = 1.0 Unicode [回到目录] Python 2有基于ASCII的str()类型,其可通过单独的unicode()函数转成unicode类型,但没有byte类型。 而在Python 3中,终于有了Unicode(utf-8)字符串,以及两个字节类:bytes和bytearrays。 Python 2 ? 1 print 'Python', python_version() Python 2.7.6 ? 1 print type(unicode('this is like a python3 str type')) ? 1 print type(b'byte type does not exist') ? 1 print 'they are really' + b' the same' they are really the same ? 1 print type(bytearray(b'bytearray oddly does exist though')) Python 3 ? 12 print('Python', python_version())print('strings are now utf-8 u03BCnicou0394é!') Python 3.4.1strings are now utf-8 μnicoΔé! ? 12 print('Python', python_version(), end="")print(' has', type(b' bytes for storing data')) Python 3.4.1 has ? 12 print('and Python', python_version(), end="")print(' also has', type(bytearray(b'bytearrays'))) and Python 3.4.1 also has ? 1 'note that we cannot add a string' + b'bytes for data' TypeError Traceback (most recent call last) in ()----> 1 'note that we cannot add a string' + b'bytes for data' TypeError: Can't convert 'bytes' object to str implicitly xrange [回到目录] 在Python 2.x中,经常会用xrange()创建一个可迭代对象,通常出现在“for循环”或“列表/集合/字典推导式”中。 这种行为与生成器非常相似(如”惰性求值“),但这里的xrange-iterable无尽的,意味着可能在这个xrange上无限迭代。 由于xrange的“惰性求知“特性,如果只需迭代一次(如for循环中),range()通常比xrange()快一些。不过不建议在多次迭代中使用range(),因为range()每次都会在内存中重新生成一个列表。 在Python 3中,range()的实现方式与xrange()函数相同,所以就不存在专用的xrange()(在Python 3中使用xrange()会触发NameError)。 ? 12345678910 import timeit n = 10000def test_range(n): return for i in range(n): pass def test_xrange(n): for i in xrange(n): pass Python 2 ? 1234567 print 'Python', python_version() print 'ntiming range()'%timeit test_range(n) print 'nntiming xrange()'%timeit test_xrange(n) Python 2.7.6 timing range()1000 loops, best of 3: 433 µs per loop timing xrange()1000 loops, best of 3: 350 µs per loop Python 3 ? 1234 print('Python', python_version()) print('ntiming range()')%timeit test_range(n) Python 3.4.1 timing range()1000 loops, best of 3: 520 µs per loop ? 1 print(xrange(10)) NameError Traceback (most recent call last)in ()----> 1 print(xrange(10)) NameError: name 'xrange' is not defined Python 3中的range对象中的__contains__方法 另一个值得一提的是,在Python 3.x中,range有了一个新的__contains__方法。__contains__方法可以有效的加快Python 3.x中整数和布尔型的“查找”速度。 ? 123456789101112 x = 10000000def val_in_range(x, val): return val in range(x) def val_in_xrange(x, val): return val in xrange(x) print('Python', python_version())assert(val_in_range(x, x/2) == True)assert(val_in_range(x, x//2) == True)%timeit val_in_range(x, x/2)%timeit val_in_range(x, x//2) Python 3.4.11 loops, best of 3: 742 ms per loop1000000 loops, best of 3: 1.19 µs per loop 根据上面的timeit的结果,查找整数比查找浮点数要快大约6万倍。但由于Python 2.x中的range或xrange没有__contains__方法,所以在Python 2中的整数和浮点数的查找速度差别不大。 ? 12345678910 print 'Python', python_version() assert(val_in_xrange(x, x/2.0) == True)assert(val_in_xrange(x, x/2) == True)assert(val_in_range(x, x/2) == True)assert(val_in_range(x, x//2) == True)%timeit val_in_xrange(x, x/2.0)%timeit val_in_xrange(x, x/2)%timeit val_in_range(x, x/2.0)%timeit val_in_range(x, x/2) Python 2.7.71 loops, best of 3: 285 ms per loop1 loops, best of 3: 179 ms per loop1 loops, best of 3: 658 ms per loop1 loops, best of 3: 556 ms per loop 下面的代码证明了Python 2.x中没有__contain__方法: ? 12 print('Python', python_version())range.__contains__ Python 3.4.1 ? 12 print('Python', python_version())range.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last) in ()1 print 'Python', python_version()----> 2 range.__contains__ AttributeError: 'builtin_function_or_method' object has no attribute '__contains__' ? 12 print('Python', python_version())xrange.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last)in ()1 print 'Python', python_version()----> 2 xrange.__contains__ AttributeError: type object 'xrange' has no attribute '__contains__' 关于Python 2中xrange()与Python 3中range()之间的速度差异的一点说明: 有读者指出了Python 3中的range()和Python 2中xrange()执行速度有差异。由于这两者的实现方式相同,因此理论上执行速度应该也是相同的。这里的速度差别仅仅是因为Python 3的总体速度就比Python 2慢。 ? 12345 def test_while(): i = 0 while i < 20000: i += 1 return ? 12 print('Python', python_version())%timeit test_while() Python 3.4.1%timeit test_while()100 loops, best of 3: 2.68 ms per loop ? 12 print 'Python', python_version()%timeit test_while() Python 2.7.61000 loops, best of 3: 1.72 ms per loop 触发异常 [回到目录] Python 2支持新旧两种异常触发语法,而Python 3只接受带括号的的语法(不然会触发SyntaxError): Python 2 ? 1 print 'Python', python_version() Python 2.7.6 ? 1 raise IOError, "file error" IOError Traceback (most recent call last) in ()----> 1 raise IOError, "file error" IOError: file error ? 1 raise IOError("file error") IOError Traceback (most recent call last) in ()----> 1 raise IOError("file error") IOError: file error Python 3 ? 1 print('Python', python_version()) Python 3.4.1 ? 1 raise IOError, "file error" File "", line 1raise IOError, "file error"^SyntaxError: invalid syntaxThe proper way to raise an exception in Python 3: ? 12 print('Python', python_version())raise IOError("file error") Python 3.4.1 OSError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 raise IOError("file error") OSError: file error 异常处理 [回到目录] Python 3中的异常处理也发生了一点变化。在Python 3中必须使用“as”关键字。 Python 2 ? 12345 print 'Python', python_version()try: let_us_cause_a_NameErrorexcept NameError, err: print err, '--> our error message' Python 2.7.6name 'let_us_cause_a_NameError' is not defined --> our error message Python 3 ? 12345 print('Python', python_version())try: let_us_cause_a_NameErrorexcept NameError as err: print(err, '--> our error message') Python 3.4.1name 'let_us_cause_a_NameError' is not defined --> our error message next()函数和.next()方法 [回到目录] 由于会经常用到next()(.next())函数(方法),所以还要提到另一个语法改动(实现方面也做了改动):在Python 2.7.5中,函数形式和方法形式都可以使用,而在Python 3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。 Python 2 ? 1234 print 'Python', python_version()my_generator = (letter for letter in 'abcdefg')next(my_generator)my_generator.next() Python 2.7.6'b' Python 3 ? 123 print('Python', python_version())my_generator = (letter for letter in 'abcdefg')next(my_generator) Python 3.4.1'a' ? 1 my_generator.next() AttributeError Traceback (most recent call last) in ()----> 1 my_generator.next() AttributeError: 'generator' object has no attribute 'next' For循环变量与全局命名空间泄漏 [回到目录] 好消息是:在Python 3.x中,for循环中的变量不再会泄漏到全局命名空间中了! 这是Python 3.x中做的一个改动,在“What's New In Python 3.0”中有如下描述: “列表推导不再支持[... for var in item1, item2, ...]这样的语法,使用[... for var in (item1, item2, ...)]代替。还要注意列表推导有不同的语义:现在列表推导更接近list()构造器中的生成器表达式这样的语法糖,特别要注意的是,循环控制变量不会再泄漏到循环周围的空间中了。” Python 2 ? 12345678 print 'Python', python_version() i = 1print 'before: i =', i print 'comprehension: ', [i for i in range(5)] print 'after: i =', i Python 2.7.6before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 4 Python 3 ? 12345678 print('Python', python_version()) i = 1print('before: i =', i) print('comprehension:', [i for i in range(5)]) print('after: i =', i) Python 3.4.1before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 1 比较无序类型 [回到目录] Python 3中另一个优秀的改动是,如果我们试图比较无序类型,会触发一个TypeError。 Python 2 ? 1234 print 'Python', python_version()print "[1, 2] > 'foo' = ", [1, 2] > 'foo'print "(1, 2) > 'foo' = ", (1, 2) > 'foo'print "[1, 2] > (1, 2) = ", [1, 2] > (1, 2) Python 2.7.6[1, 2] > 'foo' = False(1, 2) > 'foo' = True[1, 2] > (1, 2) = False Python 3 ? 1234 print('Python', python_version())print("[1, 2] > 'foo' = ", [1, 2] > 'foo')print("(1, 2) > 'foo' = ", (1, 2) > 'foo')print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2)) Python 3.4.1 TypeError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 print("[1, 2] > 'foo' = ", [1, 2] > 'foo')3 print("(1, 2) > 'foo' = ", (1, 2) > 'foo')4 print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2))TypeError: unorderable types: list() > str() 通过input()解析用户的输入 [回到目录] 幸运的是,Python 3改进了input()函数,这样该函数就会总是将用户的输入存储为str对象。在Python 2中,为了避免读取非字符串类型会发生的一些危险行为,不得不使用raw_input()代替input()。 Python 2 ? 1234567891011121314151617 Python 2.7.6[GCC 4.0.1 (Apple Inc. build 5493)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) my_input = raw_input('enter a number: ') enter a number: 123 type(my_input) Python 3 ? 12345678 Python 3.4.1[GCC 4.2.1 (Apple Inc. build 5577)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) 返回可迭代对象,而不是列表 [回到目录] 在xrange一节中可以看到,某些函数和方法在Python中返回的是可迭代对象,而不像在Python 2中返回列表。 由于通常对这些对象只遍历一次,所以这种方式会节省很多内存。然而,如果通过生成器来多次迭代这些对象,效率就不高了。 此时我们的确需要列表对象,可以通过list()函数简单的将可迭代对象转成列表。 Python 2 ? 1234 print 'Python', python_version() print range(3)print type(range(3)) Python 2.7.6[0, 1, 2] Python 3 ? 1234 print('Python', python_version())print(range(3))print(type(range(3)))print(list(range(3))) Python 3.4.1range(0, 3)[0, 1, 2] 下面列出了Python 3中其他不再返回列表的常用函数和方法:•zip()•map()•filter()•字典的.key()方法•字典的.value()方法•字典的.item()方法 更多关于Python 2和Python 3的文章 [回到目录] 下面列出了其他一些可以进一步了解Python 2和Python 3的优秀文章, //迁移到 Python 3•Should I use Python 2 or Python 3 for my development activity?•What's New In Python 3.0•Porting to Python 3•Porting Python 2 Code to Python 3•How keep Python 3 moving forward // 对Python 3的褒与贬•10 awesome features of Python that you can't use because you refuse to upgrade to Python 3•关于你不想知道的所有Python3 unicode特性•Python 3 正在毁灭 Python•Python 3 能振兴 Python•Python 3 is fine

xuning715 2019-12-02 01:10:35 0 浏览量 回答数 0

问题

我的python meta搜索引擎会要求使用框架吗?

祖安文状元 2020-02-22 18:02:56 12 浏览量 回答数 2

问题

如何根据键盘输入来切换布尔值?

kun坤 2019-12-25 09:44:36 4 浏览量 回答数 1

问题

Python一个布尔值问题

泥巴叔叔 2019-12-01 19:36:10 421 浏览量 回答数 6

问题

从Python中的函数返回多个值的最佳方法是什么?

游客6qcs5bpxssri2 2019-12-01 19:52:58 26 浏览量 回答数 2

问题

如何计算NumPy bool数组中真实元素的数量

保持可爱mmm 2020-02-06 22:52:42 2 浏览量 回答数 1

回答

1、变量声明声明变量的时候,直接使用例如a = 1这样的方式即可。既不用像js语言那样使用一个通用的var或者let之类方式表示声明,也不需要像c++语言那样使用更严格的int或char方式进行声明。注意,变量声明的时候必须赋值,不然会报错。a = 1print(a) # 1122、变量类型常见类型:1、数字分为整数和浮点数,二者看起来一致,但实际还是有所差异的2、字符串一般的字符串,被单引号和双引号所包含。foo = 'a'print(foo) # a12如果是多行字符串,即一个字符串写在不同行上。那么则用三个引号包含在一起,不然会报错。a = '''abc'''print(a)abc1234567如果字符串不想被转义,那么在引号前面加r即可foo = r'anb'print(foo) # anb12如以上,如果不加r的话,那么a和b就不在同一行了。3、布尔值当然就是True或者False了。注意:True和False是大写的foo = Falseprint(foo) # False12布尔值会被运用于各种判断,假如是需要相反的条件,比如当前是True,要求Flase才执行,那么就用not True。4、空值没有undefined,没有null之类的东西,在Python里,空值是None,相当于js里面的null注意,None的首字母是大写的。5、其他比如自定义类型,典型的就是类,但这个不是标准的类型(非内置)。另外,Python没有常量。因为他不支持类似const之类的声明方式。

ylrf1212 2019-12-02 01:06:08 0 浏览量 回答数 0

回答

print函数是python语言中的一个输出函数,可以输出以下几种内容字符串和数值类型 可以直接输出print( 1)1print( "Hello World")Hello World 2.变量无论什么类型,数值,布尔,列表,字典...都可以直接输出x = 12 print(x)12s = 'Hello' print(s)HelloL = [ 1, 2, 'a'] print(L)[ 1, 2, 'a']t = ( 1, 2, 'a') print(t)( 1, 2, 'a')d = { 'a': 1, 'b': 2} print(d){ 'a': 1, 'b': 2} 3.格式化输出类似于C中的 printfs'Hello'x = len(s) print( "The length of %s is %d" % (s,x) )The length of Hello is 5 【注意】Python2和3的print函数格式不同,3要求加括号(print())缩进最好使用4个空格

xuning715 2019-12-02 01:10:22 0 浏览量 回答数 0

回答

print函数是python语言中的一个输出函数,可以输出以下几种内容字符串和数值类型 可以直接输出print( 1)1print( "Hello World")Hello World 2.变量无论什么类型,数值,布尔,列表,字典...都可以直接输出x = 12 print(x)12s = 'Hello' print(s)HelloL = [ 1, 2, 'a'] print(L)[ 1, 2, 'a']t = ( 1, 2, 'a') print(t)( 1, 2, 'a')d = { 'a': 1, 'b': 2} print(d){ 'a': 1, 'b': 2} 3.格式化输出类似于C中的 printfs'Hello'x = len(s) print( "The length of %s is %d" % (s,x) )The length of Hello is 5 【注意】Python2和3的print函数格式不同,3要求加括号(print())缩进最好使用4个空格

半指温柔乐 2019-12-02 01:09:39 0 浏览量 回答数 0

回答

Python bool() 函数描述bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False。bool 是 int 的子类。语法以下是 bool() 方法的语法:class bool([x])参数x -- 要进行转换的参数。返回值返回 Ture 或 False。实例以下展示了使用 bool 函数的实例:bool()Falsebool(0)Falsebool(1)Truebool(2)Trueissubclass(bool, int) # bool 是 int 子类True

世事皆空 2019-12-02 01:07:49 0 浏览量 回答数 0

回答

Python中的ctypes模块可能是Python调用C方法中最简单的一种。ctypes模块提供了和C语言兼容的数据类型和函数来加载dll文件,因此在调用时不需对源文件做任何的修改。也正是如此奠定了这种方法的简单性。 示例如下 实现两数求和的C代码,保存为add.c //sample C file to add 2 numbers - int and floats #include <stdio.h> int add_int(int, int); float add_float(float, float); int add_int(int num1, int num2){ return num1 + num2; } float add_float(float num1, float num2){ return num1 + num2; } 接下来将C文件编译为.so文件(windows下为DLL)。下面操作会生成adder.so文件 #For Linux $ gcc -shared -Wl,-soname,adder -o adder.so -fPIC add.c #For Mac $ gcc -shared -Wl,-install_name,adder.so -o adder.so -fPIC add.c 现在在你的Python代码中来调用它 from ctypes import * #load the shared object file adder = CDLL('./adder.so') #Find sum of integers res_int = adder.add_int(4,5) print "Sum of 4 and 5 = " + str(res_int) #Find sum of floats a = c_float(5.5) b = c_float(4.1) add_float = adder.add_float add_float.restype = c_float print "Sum of 5.5 and 4.1 = ", str(add_float(a, b)) 输出如下 Sum of 4 and 5 = 9 Sum of 5.5 and 4.1 = 9.60000038147 在这个例子中,C文件是自解释的,它包含两个函数,分别实现了整形求和和浮点型求和。 在Python文件中,一开始先导入ctypes模块,然后使用CDLL函数来加载我们创建的库文件。这样我们就可以通过变量adder来使用C类库中的函数了。当adder.add_int()被调用时,内部将发起一个对C函数add_int的调用。ctypes接口允许我们在调用C函数时使用原生Python中默认的字符串型和整型。 而对于其他类似布尔型和浮点型这样的类型,必须要使用正确的ctype类型才可以。如向adder.add_float()函数传参时, 我们要先将Python中的十进制值转化为c_float类型,然后才能传送给C函数。这种方法虽然简单,清晰,但是却很受限。例如,并不能在C中对对象进行操作。

montos 2020-04-16 21:23:52 0 浏览量 回答数 0

问题

Python基础测验(答案篇)

珍宝珠 2019-12-01 22:02:53 603 浏览量 回答数 1

回答

您的布尔逻辑不正确: if l==" Row totalEven " and (l=='*'): 这怎么能评估True?输入行永远不能同时等于这两个字符串。我认为你需要一个or,而不是and。也许更好: if l != " Row totalEven *" and \ l != '**': nEv = l.split('*')[2] # Choose the 2nd column of the line 现在,请注意[2]选择第三列,而不是第二列:Python具有从零开始的索引。您可以通过获取最后一列来简化此操作: nEv = l.split('*')[-1] # Chooses the right-most column of the line 更正 由于边距上也有列分隔符,因此列表的每一端都会有一个空字符串,例如 ['', ' 1 ', ' 1440000 ', '']您想要的列是[2]或[-2]。

一码平川MACHEL 2019-12-02 01:57:39 0 浏览量 回答数 0

回答

python可以做shell脚本吗? 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它的返回值。试一下在 python的解释器里输入os.system(”ls -l”),就可以看到”ls”列出了当前目录下的文件。可以说,通过这个函数,python就拥有了shell的所有能力。呵呵。。不过,通常这条命令不需要用到。因为shell常用的那些命令在python中通常有对应而且同样简洁的写法。 shell中最常用的是ls命令,python对应的写法是:os.listdir(dirname),这个函数返回字符串列表,里面是所有的文件名,不过不包含”.”和”..”。如果要遍历整个目录的话就会比较复杂一点。我们等下再说吧。先在解释器里试一下: os.listdir(”/”) [’tmp’, ‘misc’, ‘opt’, ‘root’, ‘.autorelabel’, ’sbin’, ’srv’, ‘.autofsck’, ‘mnt’, ‘usr’, ‘var’, ‘etc’, ’selinux’, ‘lib’, ‘net’, ‘lost found’, ’sys’, ‘media’, ‘dev’, ‘proc’, ‘boot’, ‘home’, ‘bin’] 就像这样,接下去所有命令都可以在python的解释器里直接运行观看结果。 对应于cp命令的是:shutil.copy(src,dest),这个函数有两个参数,参数src是指源文件的名字,参数dest则是目标文件或者目标目录的名字。 如果dest是一个目录名,就会在那个目录下创建一个相同名字的文件。与shutil.copy函数相类似的是 shutil.copy2(src,dest),不过copy2还会复制最后存取时间和最后更新时间。 不过,shell的cp命令还可以复制目录,python的shutil.copy却不行,第一个参数只能是一个文件。这怎么办?其实,python还有个shutil.copytree(src,dst[,symlinks]) 。参数多了一个symlinks,它是一个布尔值,如果是True的话就创建符号链接。 移动或者重命名文件和目录呢?估计被聪明的朋友猜到了,shutil.move(src,dst),呵呵。。与mv命令类似,如果src和dst在同一个文件系统上,shutil.move只是简单改一下名字,如果src和dst在不同的文件系统上,shutil.move会先把src复制到dst,然后删除src文件。看到现在,大多数朋友应该已经对 python的能力有点眉目了,接下来我就列个表,介绍一下其它的函数: os.chdir(dirname)把当前工作目录切换到dirname下 os.getcwd()返回当前的工作目录路径 os.chroot(dirname)把dirname作为进程的根目录。和*nix下的chroot命令类似 os.chmod(path,mode)更改path的权限位。mode可以是以下值(使用or)的组合: os.S_ISUIDos.S_ISGIDos.S_ENFMTos.S_ISVTXos.S_IREADos.S_IWRITEos.S_IEXECos.S_IRWXUos.S_IRUSRos.S_IWUSRos.S_IXUSRos.S_IRWXGos.S_IRGRPos.S_IWGRPos.S_IXGRPos.S_IRWXOos.S_IROTHos.S_IWOTHos.S_IXOTH 具体它们是什么含义,就不仔细说了,基本上就是R代表读,W代表写,X代表执行权限。USR 代表用户,GRP代表组,OTH代表其它。 os.chown(path,uid,gid)改变文件的属主。uid和gid为-1的时候不改变原来的属主。 os.link(src,dst)创建硬连接 os.mkdir(path,[mode])创建目录。mode的意义参见os.chmod(),默认是0777 os.makedirs(path,[mode])和os.mkdir()类似,不过会先创建不存在的父目录。 os.readlink(path)返回path这个符号链接所指向的路径 os.remove(path)删除文件,不能用于删除目录 os.rmdir(path)删除文件夹,不能用于删除文件 os.symlink(src,dst)创建符号链接 shutil.rmtree(path[,ignore_errors[,onerror]]) 删除文件夹介绍了这么多,其实只要查一下os和shutil两个模块的文档就有了,呵呵。。真正编写 shell脚本的时候还需要注意: 1.环境变量。python的环境变量保存在os.environ这个字典里,可以用普通字典的方法修改它,使用system启动其它程序的时候会自动被继承。比如: os.environ[”fish”]=”nothing”不过也要注意,环境变量的值只能是字符串。和shell有些不同的是,python没有 export环境变量这个概念。为什么没有呢?因为python没有必要有:-) 2.os.path这个模块里包含了很多关于路径名处理的函数。在shell里路径名处理好像不是很重要,但是在python里经常需要用到。最常用的两个是分离和合并目录名和文件名: os.path.split(path) -> (dirname,basename)这个函数会把一个路径分离为两部分,比如:os.path.split(”/foo /bar.dat”)会返回(”/foo”,”bar.dat”) os.path.join(dirname,basename)这个函数会把目录名和文件名组合成一个完整的路径名,比如:os.path.join(”/foo”,”bar.dat”)会返回”/foo/bar.dat”。这个函数和os.path.split()刚好相反。 还有这些函数: os.path.abspath(path)把path转成绝对路径 os.path.expanduser(path)把path中包含的”~”和”~user”转换成用户目录 os.path.expandvars(path)根据环境变量的值替换path中包含的”$name”和”${name}”,比如环境变量 FISH=nothing,那os.path.expandvars(”$FISH/abc”)会返回”nothing/abc” os.path.normpath(path)去掉path中包含的”.”和”..” os.path.splitext(path)把path分离成基本名和扩展名。比如:os.path.splitext(”/foo /bar.tar.bz2″)返回(’/foo/bar.tar’, ‘.bz2′)。要注意它和os.path.split()的区别 3.在os模块有一个很好用的函数叫os.stat()没有介绍,因为os.path模块里包含了一组和它具有同样功能的函数,但是名字更好记一点。 os.path.exists(path)判断文件或者目录是否存在 os.path.isfile(判断path所指向的是否是一个普通文件,而不是目录 os.path.isdir(path) 判断path所指向的是否是一个目录,而不是普通文件 os.path.islink(path)判断path所指向的是否是一个符号链接 os.path.ismount(path)判断path所指向的是否是一个挂接点(mount point) os.path.getatime(path)返回path所指向的文件或者目录的最后存取时间。 os.path.getmtime(path)返回path所指向的文件或者目录的最后修改时间 os.path.getctime(path)返回path所指向的文件的创建时间 os.path.getsize(path返回path所指向的文件的大小 4.应用python编写shell脚本经常要用到os,shutil,glob(正则表达式的文件名),tempfile(临时文件),pwd(操作/etc/passwd文件),grp(操作/etc/group文件),commands(取得一个命令的输出)。前面两个已经基本上介绍完了,后面几个很简单,看一下文档就可以了。 5.sys.argv是一个列表,保存了python程序的命令行参数。其中 sys.argv[0]是程序本身的名字。不能光说不练,接下来我们就编写一个用于复制文件的简单脚本。前两天叫我写脚本的同事有个几万个文件的目录,他想复制这些文件到其它的目录,又不能直接复制目录本身。他试了一下”cp src/* dest/”结果报了一个命令行太长的错误,让我帮他写一个脚本。操起python来:import sys,os.path,shutilfor f in os.listdir(sys.argv[1]):shutil.copy(os.path.join(sys.argv[1],f),sys.argv[2]) 再试一下linuxapp版里的帖子——把一个文件夹下的所有文件重命名成 10001~10999。可以这样写:import os.path,sysdirname=sys.argv[1]i=10001for f in os.listdir(dirname):src=os.path.join(dirname,f)if os.path.isdir(src):continueos.rename(src,str(i)) i =1 os.chkdir(path) 转换到目录path 下。 os.system('md a') 可以直接创建目录。 os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。● os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。● os.getenv()和os.putenv()函数分别用来读取和设置环境变量。● os.listdir()返回指定目录下的所有文件和目录名。● os.remove()函数用来删除一个文件。● os.system()函数用来运行shell命令。● os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用'rn',Linux使用'n'而Mac使用'r'。● os.path.split()函数返回一个路径的目录名和文件名。 os.path.split('/home/swaroop/byte/code/poem.txt') ('/home/swaroop/byte/code', 'poem.txt')● os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录。类似地,os.path.exists()函数用来检验给出的路径是否真地存在。 文件重定向 已有PY文件new1.py ,在命令行下输入:new1>new.txt 可以将new1运行的结果输出到文件new.txt,这称为流重定向。

元芳啊 2019-12-02 01:04:36 0 浏览量 回答数 0

问题

可以在Python中以'if'的语法在布尔值内使用路径吗?

is大龙 2020-03-24 13:59:00 3 浏览量 回答数 1

回答

如果您的字符串仅包含基本文字(即字符串,字节,数字,元组,列表,字典,集合,布尔值和“无”),则可以使用ast模块来解析字符串(ast.literal_eval)。 : import ast in_str = """[["a","bb"],["c12","dddd"],["and","so on"]]""" res_list = ast.literal_eval(in_str) print(res_list) # [['a','bb'],['c12','dddd'],['and','so on']] 从文档中: 这可用于安全地评估包含来自不受信任来源的Python值的字符串,而无需自己解析值。它不能评估任意复杂的表达式,例如涉及运算符或索引的表达式。 但您还应该注意: 由于Python AST编译器中的堆栈深度限制,使用足够大/复杂的字符串可能会使Python解释器崩溃。 如果您还需要平整结果列表,则可以按照答案如何从列表列表中制作平整列表? 我从那篇博文中喜欢的一种方法是: import functools import operators flat_list = functools.reduce(operator.iconcat, res_list, []) print(flat_list) # ['a', 'bb', 'c12', 'dddd', 'and', 'so on'] 根据您提供给我们的信息,很难以json表示形式转换该字符串,但是可以尝试考虑您拥有两个元素列表的列表。如果我们将内部列表中的两个元素视为(键,值)关系,则可以通过以下方式创建与json兼容的字典: json_dict = dict(res_list) print(json_dict) # {'a': 'bb', 'c12': 'dddd', 'and': 'so on'} import json json.dumps(json_dict) # '{"a": "bb", "c12": "dddd", "and": "so on"}' 回答来源:stackoverflow

is大龙 2020-03-23 17:45:58 0 浏览量 回答数 0

回答

在python中,普通的列表list和numpy中的数组array是不一样的,最大的不同是:一个列表中可以存放不同类型的数据,包括int、float和str,甚至布尔型;而一个数组中存放的数据类型必须全部相同,int或float。​ 在list中的数据类型保存的是数据的存放的地址,简单的说就是指针,并非数据,这样保存一个list就太麻烦了,例如list1=[1,2,3,4]需要4个指针和四个数据,增加了存储和消耗cpu,而array1=numpy.array([1,2,3,4])只需要存放四个数据,读取和计算更加方便,因此在做纯数字操作时,建议使用array。​ 也正因为列表可以存放不同类型的数据,因此列表中每个元素的大小可以相同,也可以不同,也就不支持一次性读取一列,即使是对于标准的二维数字列表:a=[[1,2,3],[4,5,6]]a[0] #取一行[1, 2, 3]a[:,0] #尝试用数组的方法读取一列失败TypeError: list indices must be integers or slices, not tuple12345​ 我们需要用列表解析的方法读取一列:b=[x[0] for x in a]print(b)[1, 4]123​ 而对于数组,可以直接读取:import numpy as npa=np.array([[1,2,3],[4,5,6]])a[:,0]array([1, 4])1234​ 当然列表在处理混合数据时也有着独特的优势。

xuning715 2019-12-02 01:10:04 0 浏览量 回答数 0

问题

如何在python中找到列表数组的最小点

is大龙 2020-03-25 09:22:47 18 浏览量 回答数 2

问题

Python-无法将float转换为numpy数组

养狐狸的猫 2019-12-01 19:58:23 8 浏览量 回答数 0

回答

1.print和import1.1 print 略1.2 import(1)impore somemodule (2)from somemodule import somefunction(3)from somemodule import somefunction,anotherfunction(4)from somemodule import*(5)import somemodule as somename #为整个模块提供别名(6)from somemodule import somefunction as somename #为某个模块的某个函数提供别名 2.赋值2.1 序列解包:将多个值的序列解开,然后放到变量的序列中。2.2 链式赋值:将同一个值赋给多个变量。2.3 增量赋值:eg:x+=1 3.语句块:条件为真时执行或执行多次的一组语句,由代码前放置空格缩进语句创建。 4.条件语句4.1 布尔变量 python中的假:False None 0 “” () [] {}4.2 if语句4.3 else语句4.4 elif语句4.5 嵌套代码块4.6 条件(1)比较运算符 (2)相等运算符 == (3)同一性运算符 is (4)成员资格运算符 in (5)字符串和序列比较 (6)布尔运算符 4.7 断言: assert 放入检查点,确保某个条件一定为真才能让程序正常工作 循环 5.1 while循环 5.2 for循环 5.3 循环遍历字典元素 5.4 迭代工具 (1) 并行迭代:同时迭代两个序列 (2)按索引迭代 (3)翻转和排序迭代 5.5 跳出循环 (1) break (2) continue (3) while True/break 5.6 循环中的else子句 6.列表推导式-轻量级循环 7.pass,del,exec 本章相关代码: -- coding: utf-8 -- 1.print 与import 1.1 print 使用逗号输出 print 'Age:',42 #Age: 42name='xiaming'age='42'print name,age #xiaming 42 2.赋值语句 2.1.序列解包:将多个值的序列解开,然后放到变量的序列中 x,y,z=1,2,3print x,y,z #1 2 3x,y=y,x #2 1 3print x,y,zv=1,2,3x,y,z=vprint x #1 2.2.链式赋值 将同一个值赋给多个变量的捷径 x=y=4print x,y 2.3.增量赋值 x=2x+=1x*=2a='bo'a+='x'a*=2print x,a #6,boxbox 3:语句块:缩排 4.条件与条件语句 4.1.布尔变量的作用 4.2 if elif else语句 name=raw_input('what is your name?')if name.endswith('ming'): print 'hello,ming' elif name.endswith('hong'): print 'hello,hong' else: print 'hello' 4.3 嵌套语句 num=raw_input('input a number')if num>10: if num<20: print '10<num<20' else: print 'num>=20' else: print 'num<=10' #5.循环 5.1.while循环 x=1while x<=10: print x x+=1 name=''while not name: name=raw_input('enter your name:') print 'Hello,%s!'%name #Hello,ming! 5.2.for 循环 names=['ming','hong','qiang','qing']for n in names: print n print range(10) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] rang(0,10)for num in range(1,10): print num 5.3.循环遍历字典元素 d={'x':1,'y':2,'z':3}for key in d: print key,d[key] #y 2 x 1 z 3 5.4.一些迭代工具 5.4.1 并行迭代 names=['ming','hong','qiang','qing']ages=[10,11,12,13]for i in range(len(names)): print names[i],'is',ages[i],'years old' #ming is 10 years old... print zip(names,ages) #[('ming', 10), ('hong', 11), ('qiang', 12), ('qing', 13)] 将两个序列压缩,返回一个元组的列表for n,a in zip(names,ages): print n, 'is',a, 'years old' #ming is 10 years old... 5.4.2按索引迭代 5.4.3翻转和排序迭代 5.5.跳出循环 5.5.1break from math import sqrtfor n in range(99,0,-1): print n root=sqrt(n) if root==int(root): print "the biggst is %s"%n break 5.5.2 continue 5.5.3 while True/break while True: word=raw_input('Please enter a word:') if not word:break print 'The word was '+word 5.6 循环体中的else子句 from math import sqrtfor n in range(99,80,-1): print n root=sqrt(n) if root==int(root): print "the biggst is %s"%n break else: print "didn't find it" 6 列表推导式-轻量级循环:利用其它列表创建新列表 print [x*x for x in range(10)] #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]print [x*x for x in range(10) if x%3==0] #[0, 9, 36, 81]print [(x,y,z) for x in range(2) for y in range(2) for z in range(2)] [(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)] 7 三个语句:pass,del,exec 7.1 pass : 7.2 del:删除不再使用的对象 7.3 exec:执行一系列Py语句 exel:计算Py表达式,并且返回结果值

xuning715 2019-12-02 01:10:20 0 浏览量 回答数 0

回答

调用返回的值(例如AND(1,0)`)无法同时是AND类的实例和数字0。您可以获取实例,也可以获取整数结果,但不能同时获取两者。 或两者都不完全相同。您可以构建您的类,以便在某些情况下实例的行为类似于整数。例如,如果添加一个int方法,则将该类传递给int()时,该类将可转换为整数。 其他一些类型甚至可以更轻松地转换为。如果期望所有的门都具有二进制输出值0或1,则可以通过在类上实现bool方法来获得所需的值(自动评估)。Python在评估对象是否“真实”时使用此方法。因此,如果if AND(...)会像您期望的那样进行评估,那么all([AND(...),AND(...)])(也会很方便地实现AND `类)。 请注意,布尔值True和False分别等于整数1和0。bool类是int的子类! 这是我使用bool(而不是output)制作类的方法: class Gate: def __init__(self, \*rgs, \*kwargs): self.inputs = args or list(kwargs.values()) # note, no int() calls made here assert (len(self.inputs) >= 2), "Must have two or more inputs for a gate." def __bool__(self): raise NotImplementedError() # subclasses are expected to override this method def __repr__(self): return f"<{self.__class__.__name__}(\*self.inputs})=>{bool(self)}>" class And(Gate): def __bool__(self): return all(self.inputs) 现在您可以执行诸如result = And(True,And(True,False,))之类的操作,然后将一个AND对象保存到result中。但是bool(result)会给你False的值。获取类的repr还将评估其布尔值(因此它可以在repr字符串中包含True或False结果)。 注意,我们不对输入进行任何形式的转换(没有int()调用)。这意味着代码可以与其他类型的输入值(例如基于从磁盘上的文件中读取内容或提示用户的输入)懒惰地工作: class Input: def __init__(self, prompt): self.prompt = prompt def __bool__(self): return bool(int(input(self.prompt))) def __repr__(self): return f"<Input: {self.prompt}>" 如果执行lazy_result = And(Input(“ A:”),Input(“ B:”))),则执行print(lazy_result)或bool(lazy_result)会提示用户输入整数值,并进行评估所需的输出。注意,由于all中的短循环,如果在第一个提示符处输入0',它将不会要求第二个,因为它不需要知道B值即可得出的值。还有`!(在某些情况下可能不希望如此,因此您可能需要用不会短路的东西来代替“全部”。) 回答来源:stackoverflow

is大龙 2020-03-24 14:21:11 0 浏览量 回答数 0

回答

Pandas是Python的一个大数据处理模块。Pandas使用一个二维的数据结构DataFrame来表示表格式的数据,相比较于Numpy,Pandas可以存储混合的数据结构,同时使用NaN来表示缺失的数据,而不用像Numpy一样要手工处理缺失的数据,并且Pandas使用轴标签来表示行和列。 DataFrame类: DataFrame有四个重要的属性: index:行索引。 columns:列索引。 values:值的二维数组。 name:名字。 构建方法,DataFrame(sequence),通过序列构建,序列中的每个元素是一个字典。 frame=DateFrame构建完之后,假设frame中有’name’,’age’,’addr’三个属性,可以使用fame[‘name’]查看属性列内容,也可以fame.name这样直接查看。 frame按照’属性提取出来的每个列是一个Series类。 DataFrame类可以使用布尔型索引。 groupby(str|array…)函数:可以使用frame中对应属性的str或者和frame行数相同的array作为参数还可以使用一个会返回和frame长度相同list的函数作为参数,如果使用函数做分组参数,这个用做分组的函数传入的参数将会是fame的index,参数个数任意。使用了groupby函数之后配合,size()函数就可以对groupby结果进行统计。 groupby后可以使用: size():就是count sum():分组求和 apply(func,axis=0):在分组上单独使用函数func返回frame,不groupby用在DataFrame会默认将func用在每个列上,如果axis=1表示将func用在行上。 reindex(index,column,method):用来重新命名索引,和插值。 size():会返回一个frame,这个frame是groupby后的结果。 sum(n).argsort():如果frame中的值是数字,可以使用sum函数计算frame中摸个属性,各个因子分别求和,并返回一个Series,这个Series可以做为frame.take的参数,拿到frame中对应的行。 pivot_table(操作str1,index=str2,columns=str3,aggfunc=str4)透视图函数: str1:是给函数str4作为参数的部分。 str2:是返回frame的行名。 str3:是返回frame的列名。 str4:是集合函数名,有’mean’,’sum’这些,按照str2,str3分组。 使用透视图函数之后,可以使用.sum()这类型函数,使用后会按照index和columns的分组求和。 order_index(by,ascending): 返回一个根据by排序,asceding=True表示升序,False表示降序的frame concat(list):将一个列表的frame行数加起来。 ix[index]:就是行索引,DataFrame的普通下标是列索引。 take(index):作用和ix差不多,都是查询行,但是ix传入行号,take传入行索引。 unstack():将行信息变成列信息。 apply(func,axis=0)和applymap(func):apply用在DataFrame会默认将func用在每个列上,如果axis=1表示将func用在行上。applymap表示func用在每个元素上。 combine_first(frame2):combine_first会把frame中的空值用frame1中对应位置的数据进行填充。Series方法也有相同的方法。 stack()函数,可以将DataFrame的列转化成行,原来的列索引成为行的层次索引。(stack和unstack方法是两个互逆的方法,可以用来进行Series和DataFrame之间的转换) duplicated():返回一个布尔型Series,表示各行是否重复。 drop_duplicates():返回一个移除了重复行后的DataFrame pct_change():Series也有这个函数,这个函数用来计算同colnums两个相邻的数字之间的变化率。 corr():计算相关系数矩阵。 cov():计算协方差系数矩阵。 corrwith(Series|list,axis=0):axis=0时计算frame的每列和参数的相关系数。 数据框操作 df.head(1) 读取头几条数据 df.tail(1) 读取后几条数据 df[‘date’] 获取数据框的date列 df.head(1)[‘date’] 获取第一行的date列 df.head(1)‘date’ 获取第一行的date列的元素值 sum(df[‘ability’]) 计算整个列的和 df[df[‘date’] == ‘20161111’] 获取符合这个条件的行 df[df[‘date’] == ‘20161111’].index[0] 获取符合这个条件的行的行索引的值 df.iloc[1] 获取第二行 df.iloc1 获取第二行的test2值 10 mins to pandas df.index 获取行的索引 df.index[0] 获取第一个行索引 df.index[-1] 获取最后一个行索引,只是获取索引值 df.columns 获取列标签 df[0:2] 获取第1到第2行,从0开始,不包含末端 df.loc[1] 获取第二行 df.loc[:,’test1’] 获取test1的那一列,这个冒号的意思是所有行,逗号表示行与列的区分 df.loc[:,[‘test1’,’test2’]] 获取test1列和test2列的数据 df.loc[1,[‘test1’,’test2’]] 获取第二行的test1和test2列的数据 df.at[1,’test1’] 表示取第二行,test1列的数据,和上面的方法类似 df.iloc[0] 获取第一行 df.iloc[0:2,0:2] 获取前两行前两列的数据 df.iloc[[1,2,4],[0,2]] 获取第1,2,4行中的0,2列的数据 (df[2] > 1).any() 对于Series应用any()方法来判断是否有符合条件的

世事皆空 2019-12-02 01:07:19 0 浏览量 回答数 0

回答

一旦我回顾了对我而言至关重要的Haskell数组库的功能,并编译了一个比较表(仅电子表格:直接链接)。所以我会尽力回答。 我应该在什么基础上选择Vector.Unboxed和UArray?它们都是未装箱的数组,但Vector抽象似乎广为宣传,尤其是在循环融合方面。Vector总是更好吗?如果没有,我什么时候应该使用哪种表示形式? 如果需要二维或多维数组,则最好使用UArray而不是Vector。但是Vector有更好的API来处理向量。通常,Vector不太适合模拟多维数组。 Vector.Unboxed不能与并行策略一起使用。我怀疑不能同时使用UArray,但是至少很容易从UArray切换到盒装Array,看看并行化是否带来的好处超过了装箱成本。 对于彩色图像,我希望存储三位16位整数或三位单精度浮点数。为此,Vector或UArray是否更易于使用?表现更好? 我尝试使用数组表示图像(尽管我只需要灰度图像)。对于彩色图像,我使用Codec-Image-DevIL库读取/写入图像(绑定到DevIL库),对于灰度图像,我使用pgm库(纯Haskell)。 我对Array的主要问题是,它仅提供随机访问存储,但是它不提供许多构建Array算法的方法,也没有随便使用数组例程库(不与线性代数库接口,不允许表达卷积,fft和其他变换)。 几乎每次必须从现有阵列中构建一个新数组时,都必须构造一个中间值列表(就像Gentle Introduction 中的矩阵乘法一样)。数组构建的成本通常超过了更快的随机访问带来的好处,以至于在我的一些用例中,基于列表的表示更快。 STUArray可以为我提供帮助,但我不喜欢与神秘的类型错误以及使用STUArray编写多态代码所需的工作抗争。 因此,数组的问题在于它们不适用于数值计算。在这方面,Hmatrix的Data.Packed.Vector和Data.Packed.Matrix更好,因为它们带有固态矩阵库(注意:GPL许可证)。在性能方面,就矩阵乘法而言,hmatrix足够快(仅比Octave慢一些),但非常耗内存(比Python / SciPy消耗多倍)。 也有用于矩阵的blas库,但它不是基于GHC7建立的。 我对Repa并没有太多的经验,并且我不太了解repa代码。从我的角度来看,它可以使用的矩阵和数组算法的使用范围非常有限,但是至少可以通过该库来表达重要的算法。例如,已经存在用于矩阵乘法和用于 REPA算法中的卷积的例程。不幸的是,似乎卷积现在仅限于7×7内核(对我来说这还不够,但足以满足许多用途)。 我没有尝试过Haskell OpenCV绑定。它们应该很快,因为OpenCV确实非常快,但是我不确定绑定是否完整并且足够好以致于无法使用。而且,OpenCV本质上是非常必要的,充满破坏性的更新。我想很难在其上设计一个美观而有效的功能接口。如果采用OpenCV方式,他很可能会在任何地方使用OpenCV图像表示形式,并使用OpenCV例程对其进行操作。 对于双色调图像,每个像素仅需要存储1位。是否有预定义的数据类型可以通过将多个像素打包成一个单词来为我提供帮助,还是我自己? 据我所知,Unboxed的Bools数组负责打包和解包位向量。我记得在其他库中看过布尔数组的实​​现,在其他地方都没有看到。 最后,我的数组是二维的。我想我可以处理表示形式为“数组数组”(或向量的向量)带来的额外间接,但我更喜欢具有索引映射支持的抽象。谁能推荐标准库或Hackage中的任何内容? 除了Vector(和简单列表)之外,所有其他数组库都能够表示二维数组或矩阵。我想他们避免不必要的间接。

保持可爱mmm 2020-02-07 23:04:16 0 浏览量 回答数 0

问题

阿里音乐流行趋势预测大赛一起做-(7)初赛总结之用户分类

sixgod 2019-12-01 21:07:58 4124 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播