如果您对为什么python字符串split感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于为什么python字符串split的详细内容,我们还将为您解答不分裂的相关问题,并且
如果您对为什么python字符串split感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于为什么python字符串split的详细内容,我们还将为您解答不分裂的相关问题,并且为您提供关于Java:字符串split():我希望它在结尾处包含空字符串、Python re.split()与split()、python split()vs rsplit()性能?、python – 带字符串split()的身份怪癖的有价值信息。
本文目录一览:- 为什么python字符串split()不分裂(python中字符串split)
- Java:字符串split():我希望它在结尾处包含空字符串
- Python re.split()与split()
- python split()vs rsplit()性能?
- python – 带字符串split()的身份怪癖
为什么python字符串split()不分裂(python中字符串split)
我有以下python代码。
class MainPage(BaseHandler): def post(self, location_id): reservations = self.request.get_all(''reservations'') for r in reservations: a=str(r) logging.info("r: %s " % r) logging.info("lenr: %s " % len(r)) logging.info("a: %s " % a) logging.info("lena: %s " % len(a)) r.split('' '') a.split('' '') logging.info("split r: %s " % r) logging.info("split a: %s " % a)
我得到以下日志打印输出。
INFO 2012-09-02 17:58:51,605 views.py:98] r: court2 13 0 2012 9 2 INFO 2012-09-02 17:58:51,605 views.py:99] lenr: 20 INFO 2012-09-02 17:58:51,605 views.py:100] a: court2 13 0 2012 9 2 INFO 2012-09-02 17:58:51,606 views.py:101] lena: 20 INFO 2012-09-02 17:58:51,606 views.py:108] split r: court2 13 0 2012 9 2 INFO 2012-09-02 17:58:51,606 views.py:109] split a: court2 13 0 2012 9 2
如果我使用split(),btw代替split(’‘),则会得到相同的日志打印输出。
为什么split不将结果分成6个条目的列表?我想问题是涉及到http请求,因为我在gae交互式控制台中的测试获得了预期的结果。
答案1
小编典典split
不修改字符串。它返回拆分列表。如果要使用该列表,则需要使用来将其分配给某些内容r = r.split('' '')
。
Java:字符串split():我希望它在结尾处包含空字符串
我有以下字符串:
String str = "\nHERE\n\nTHERE\n\nEVERYWHERE\n\n";
如果仅打印此内容,它将输出如下内容(当然\n
不会“按字面意思”打印):
\nHERE\n\nTHERE\n\nEVERYWHERE\n\n\n
调用方法时split("\n")
,我想获取新行(\n
)字符之间的所有字符串,甚至最后还有空字符串。
例如,如果我今天这样做:
String strArray[] = str.split("\n");System.out.println("strArray.length - " + strArray.length);for(int i = 0; i < strArray.length; i++) System.out.println("strArray[" + i + "] - \"" + strArray[i] + "\"");
我希望它像这样打印出来(输出A):
strArray.length - 8strArray[0] - ""strArray[1] - "HERE"strArray[2] - ""strArray[3] - "THERE"strArray[4] - ""strArray[5] - "EVERYWHERE"strArray[6] - ""strArray[7] - ""
当前,它以这种方式打印(输出B),并且所有结尾的空字符串都将被跳过:
strArray.length - 6strArray[0] - ""strArray[1] - "HERE"strArray[2] - ""strArray[3] - "THERE"strArray[4] - ""strArray[5] - "EVERYWHERE"
如何使split()
方法像输出A那样包含空字符串?我当然可以编写多行代码,但是想知道,在我浪费时间尝试实现这一点之前,是否有一个简单的方法或另外两行左右的代码可以帮助我。谢谢!
答案1
小编典典使用str.split("\n",-1)
(带有否定limit
参数)。当split
给定零或无limit
参数时,它将丢弃尾随的空字段,当给定正limit
参数时,它将字段的数量限制为该数量,但是
负数
限制表示允许任意数量的字段并且不丢弃尾随的空字段。在此处进行了记录,其行为取自Perl。
Python re.split()与split()
在进行优化时,我发现内置的split()方法比re.split()快40%。
虚拟基准(可轻松复制粘贴):
import re, time, randomdef random_string(_len): letters = "ABC" return "".join([letters[random.randint(0,len(letters)-1)] for i in range(_len) ])r = random_string(2000000)pattern = re.compile(r"A")start = time.time()pattern.split(r)print "with re.split : ", time.time() - startstart = time.time()r.split("A")print "with built-in split : ", time.time() - start
为什么会有这种差异?
答案1
小编典典re.split
由于使用正则表达式会产生一些开销,因此 预期 速度会变慢。
当然,如果要在 常量 字符串上拆分,则使用毫无意义re.split()
。
python split()vs rsplit()性能?
我在python中有一个字符串。我想用maxsplit = 1
分隔符将其拆分,该分隔符非常接近字符串的结尾。
例如
a = "abcdefghijklmnopqrstuvwxyz,1".
a.split(",",1)
在性能方面会更好a.rsplit(",1)
吗?
python – 带字符串split()的身份怪癖
>>> ''hi''.split()[0] is ''hi'' True >>> ''hi there''.split()[0] is ''hi'' False >>> ''hi there again''.split()[0] is ''hi'' False
我的假设:
第一行只有一个元素,而另外两个元素有多个元素.我相信虽然像str这样的Python原语在函数中按值存储在内存中,但是在函数之间会有单独的分配来简化内存管理.我认为split()是其中一个函数,它通常会分配新的字符串.但它也处理不需要任何拆分的输入的边缘情况(例如’hi’),其中简单地返回原始字符串引用.我的解释是否正确?
解决方法
I believe that while Python primitives like str are stored in memory by value within a function,there will be separate allocations across functions to simplify memory management.
Python的对象分配不起作用.没有一个真正的“原语”概念,除了字节码编译器合并常量的一些事情外,在同一个函数或不同函数中创建两个对象并不重要.
对于这个没有更好的答案而不是指向源,所以here it is:
Py_LOCAL_INLINE(PyObject *) STRINGLIB(split_whitespace)(PyObject* str_obj,const STRINGLIB_CHAR* str,Py_ssize_t str_len,Py_ssize_t maxcount) { ... #ifndef STRINGLIB_MUTABLE if (j == 0 && i == str_len && STRINGLIB_CHECK_EXACT(str_obj)) { /* No whitespace in str_obj,so just use it as list[0] */ Py_INCREF(str_obj); PyList_SET_ITEM(list,(PyObject *)str_obj); count++; break; }
如果它没有找到任何要拆分的空格,它只会在返回的列表中重用原始字符串对象.这只是编写这个函数的一个怪癖,你不能依赖它在其他Python版本或非标准Python实现中的工作方式.
关于为什么python字符串split和不分裂的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Java:字符串split():我希望它在结尾处包含空字符串、Python re.split()与split()、python split()vs rsplit()性能?、python – 带字符串split()的身份怪癖的相关信息,请在本站寻找。
本文标签: