草庐IT

Pythonic

全部标签

确保 python 2 和 3 中的 unicode 的 Pythonic 方法

我正在努力移植一个库,使其与python2和3兼容。该库从调用应用程序接收字符串或类似字符串的对象,我需要确保将这些对象转换为unicode字符串。在python2中我可以这样做:unicode_x=unicode(x)在python3中我可以这样做:unicode_x=str(x)然而,我最好的跨版本解决方案是:defensure_unicode(x):ifsys.version_info这当然看起来不太好(尽管它有效)。有更好的解决方案吗?我知道unicode_literals和u前缀,但这两种解决方案都不起作用,因为输入来自客户端并且不是我库中的文字。

进行 "size safe"切片的 Pythonic 方式

这里引用https://stackoverflow.com/users/893/greg-hewgill对ExplainPython'sslicenotation的回答。Pythoniskindtotheprogrammeriftherearefeweritemsthanyouaskfor.Forexample,ifyouaskfora[:-2]andaonlycontainsoneelement,yougetanemptylistinsteadofanerror.Sometimesyouwouldprefertheerror,soyouhavetobeawarethatthismay

使用带有排除的最后一个数字的范围的 Pythonic 方法?

如果我想要一个从0到100的列表,步长为5,我可以使用range(0,105,5),但我也可以使用range(0,101,5).老实说,这些对我来说都没有意义,因为排除最后一个数字似乎不直观。除此之外,以五步为单位创建从0到100的列表的“正确”方法是什么?如果有人有时间,在什么情况下排除最后一个数字会使代码更易于阅读? 最佳答案 您列出的两个选项并不相似。一个是range(start,stop+step,step),另一个是range(start,stop+1,step)。他们不必返回相同的东西。他们做的唯一情况是stop-sta

python - 为什么 csv.reader 不是 pythonic?

我开始使用csv.reader在Python2.6中,但您不能在其上使用len或对其进行切片等。这背后的原因是什么?这当然感觉非常有限。或者这只是后来版本中的一个废弃模块? 最佳答案 我很确定您不能使用len或slice,因为它是一个迭代器。试试这个。importcsvr=csv.reader(...)lines=[lineforlineinr]printlen(lines)#numberoflinesforoddinlines[1::2]:printodd#printoddlines

python - 将 pandas 列转换为 "increasing"索引的 pythonic 和 uFunc-y 方法?

这个问题在这里已经有了答案:Counteachgroupsequentiallypandas(3个答案)Addnumericcolumntopandasdataframebasedonothertextualcolumn[duplicate](5个答案)Pandas:convertcategoriestonumbers(6个答案)关闭3年前。假设我有一个像这样的pandasdf:IndexAB0foo31foo22foo53bar34bar45baz5像这样添加列的快速方法是什么:IndexABAidx0foo301foo202foo503bar314bar415baz52即为每个唯一

python - 在字符串中规范化行结束的最pythonic方法是什么?

给定一个来源未知的文本字符串,如何最好地重写它以使其具有已知的行尾约定?我通常这样做:lines=text.splitlines()text='\n'.join(lines)...但这不能处理完全混淆约定的“混合”文本文件(是的,它们仍然存在!)。编辑当然,我正在做的事情是:'\n'.join(text.splitlines())...这不是我要问的。之后的总行数应该相同,所以不会剥离空行。测试用例split'a\nb\n\nc\nd''a\r\nb\r\n\r\nc\r\nd''a\rb\r\rc\rd''a\rb\n\rc\rd''a\rb\r\nc\nd''a\nb\r\nc\r

将字符串 "None"转换为适当的 None 的 Pythonic 方法

我可以创建一个if语句,打赌可能会有更好的方法。 最佳答案 你可以使用ast.literal_eval:In[6]:importastIn[7]:ast.literal_eval('None')isNoneOut[7]:True但是,if语句或ternaryexpression如果您只需要将'None'转换为None会更快:x=Noneifx=='None'elsex 关于将字符串"None"转换为适当的None的Pythonic方法,我们在StackOverflow上找到一个类似的问题

list - 一种 pythonic 方法如何查找值是否介于列表中的两个值之间

有一个排序列表和一些随机值,我想找到该值在哪个范围内。列表是这样的:[0,5,10,15,20]值(value)是,比如8。标准方法是从开始直到我们达到比我们的值更大的值(如下例所示),或者执行binarysearch.grid=[0,5,10,15,20]value=8result_index=0whileresult_index我想知道是否有更pythonic的方法,因为这虽然很短,但看起来有点眼痛。感谢您的宝贵时间! 最佳答案 >>>importbisect>>>grid=[0,5,10,15,20]>>>value=8>>>

python - 使用 `or` 会不会是 Pythonic,类似于 PHP 使用 `or die()` 的方式?

使用or是否是Pythonic,类似于PHP如何使用ordie()?我一直在使用quietorprint(stuff)代替ifverbose:print(stuff)最近。我认为它看起来更好,他们做同样的事情,而且节省了一条线。在性能方面,一个会比另一个更好吗?两者的字节码在我看来几乎相同,但我真的不知道我在看什么......or20LOAD_FAST0(quiet)3JUMP_IF_TRUE_OR_POP156LOAD_GLOBAL0(print)9LOAD_CONST1('foo')12CALL_FUNCTION1(1positional,0keywordpair)>>15POP_

coding-style - 这个成语是pythonic吗? (someBool 和 "True Result"或 "False Result")

我刚刚在一些开源Python中看到这个习语,我被饮料噎住了。而不是:ifisUp:return"Up"else:return"Down"甚至:return"Up"ifisUpelse"Down"代码如下:returnisUpand"Up"or"Down"我可以看出这是相同的结果,但这是Python中的典型习语吗?如果是这样,它是否是一些运行速度很快的性能黑客?或者它只是一次性的,需要代码审查? 最佳答案 在PEP308之前,“aandborc”成语是在Python中表达三元算术的规范方式。被编写并实现。这个成语不符合“b”答案本身就