df = pd.DataFrame({'Col1': ['Bob', 'Joe', 'Bill', 'Mary', 'Joe'], 'Col2': ['Joe', 'Steve', 'Bob', 'Bob', 'Steve'], 'Col3': np.random.random(5)}) 返回“Col1”和“Col2”的唯一值的最佳方法是什么? 期望的输出是 'Bob', 'Joe', 'Bill', 'Mary', 'Steve'
在和Python解释器一起玩时,我偶然发现了关于is运算符的这个矛盾的例子: 如果评估发生在函数中,则返回True ,否则返回False 。 >>> def func(): … a = 1000 … b = 1000 … return a is b … >>> a = 1000 >>> b = 1000 >>> a is b, func() (False, True) 由于is运算符为所涉及的对象计算id() ,这意味着a和b在函数func声明时指向同一个int实例,但是相反,它们指向不在其外的对象。 这是为什么? 注意 :我了解了Python的“is”运算符中所描述的identity( is )和equality( == )运算之间的区别。 另外,我也意识到python正在执行的范围[-5, 256]的整数的caching,正如“is”中所描述的那样,整个操作符的行为意外 。 这不是这种情况,因为这些数字超出了这个范围, 我想要评估身份而不是平等。
我将Mac更新为Mountain Lion(10.8),现在我用Python和Google App Engine开发的项目无法正常工作。 GAE库被find了,而标准的Python库(这些Python库?)被遗漏了(例如cgi , logging , json )。 当我打开eclipse(其中有PyDeV),我收到此警报: abort: couldn't find mercurial libraries in [/Library/Python/2.7/site-packages/ /usr/local/bin /Library/Python/2.7/site-packages/pip-1.1-py2.7.egg /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7 /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC /Library/Python/2.7/site-packages] (check your install and PYTHONPATH). Command line: hg -y debuginstall 有谁知道如何解决这一问题?
在许多地方, (1,2,3)和[1,2,3]可以互换使用。 我应该什么时候使用这个或那个,为什么?
我需要测量程序的某些部分的时间(不是用于debugging,而是作为输出中的一个function)。 精确度很重要,因为总时间只有一秒钟的几分之一。 当我遇到timeit时,我将使用时间模块 ,它声称避免了一些测量执行时间的常见陷阱 。 不幸的是,它有一个糟糕的界面,把一个string作为input,然后eval的。 那么,我是否需要使用这个模块来准确地测量时间,还是将时间足够? 它指的是什么陷阱? 谢谢
这是一个在我的所有编程,python和其他方面不断重复的问题。 我真的很喜欢把我的代码保存在80个字符以内,如果可能/不可怕的话。 在像Perl这样的语言中,这并不难,因为空格并不重要。 在Python中,我经常把头撞到墙上,而不是想用“好”的方式来分割我的长线。 所以,代码大师,你是怎么做到的? 任何一般的策略,你可以通知我? 我正在处理的一个特殊问题是: self.SomeLongLongName = SomeLongLongName.SomeLongLongName(some_obj, self.user1, self.user2) 当我自然地试图用Python来切断这一切时,唯一可用的方式似乎是: self.SomeLongLongName = SomeLongLongName.SomeLongLongName(some_obj, self.user1 self.user2) 我想,这看起来并不坏,但它占用了三行,这完全没有必要。 必须有更好的方法,不是吗? 注:我知道有些人不喜欢80个字符,并创造了自己的极限。 我理解这个背后的动机并尊重它,但80个字符是我的首选限制。 请不要占用太多的空间,试图说服我去120或这样的一些这样的。
我有一个Vector类,它代表了三维空间中的一个点。 这个向量有一个方法normalize(self, length = 1) ,它将向量向下/向上缩放为length == vec.normalize(length).length 。 由于浮点数的不精确性,此方法的unit testing有时会失败。 我的问题是,当方法正确实现时,如何确保这个testing不会失败? 有没有可能做到这一点没有testing一个近似值? 附加信息 : def testNormalize(self): vec = Vector(random.random(), random.random(), random.random()) self.assertEqual(vec.normalize(5).length, 5) 这有时会导致AssertionError: 4.999999999999999 != 5或AssertionError: 5.000000000000001 != 5 。 注意 :我知道浮点问题可能在Vector.length属性或Vector.normalize() 。
我想更多地了解iterators ,所以请纠正我,如果我错了。 迭代器是一个对象,它有一个指向下一个对象的指针,并被读作缓冲区或stream(即链表)。 他们是特别有效的,因为他们所做的只是告诉你什么是下一步引用,而不是使用索引。 但是我仍然不明白为什么会发生以下行为: In [1]: iter = (i for i in range(5)) In [2]: for _ in iter: ….: print _ ….: 0 1 2 3 4 In [3]: for _ in iter: ….: print _ ….: In [4]: 经过迭代器( In [2] )的第一次循环之后,就好像它已被消耗并留空,所以第二个循环( In [3] )不会打印任何东西。 但是我从来没有给itervariables赋值。 在for循环的底层真正发生了什么?
我的公司正在使用Python进行一个相对简单的embedded式项目。 在embedded式平台上有其他人使用Python吗? 总的来说,它对我们来说很好,快速开发应用程序,快速debugging。 我喜欢语言的整体“简洁”。 我在日常工作中唯一真正的问题是缺less静态检查与常规编译器会导致在运行时抛出问题,例如,一个简单的string意外的猫和一个打印语句中的int可以带来整个应用程序下来。
为什么我有问题创build一个类inheritancestr(或从int) class C(str): def __init__(self, a, b): str.__init__(self,a) self.b = b C("a", "B") TypeError: str() takes at most 1 argument (2 given) 如果我尝试使用int而不是str ,但同样适用于自定义类。 我需要使用__new__而不是__init__ ? 为什么?