GVKun编程网logo

为什么python字符串split()不分裂(python中字符串split)

17

如果您对为什么python字符串split感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于为什么python字符串split的详细内容,我们还将为您解答不分裂的相关问题,并且

如果您对为什么python字符串split感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于为什么python字符串split的详细内容,我们还将为您解答不分裂的相关问题,并且为您提供关于Java:字符串split():我希望它在结尾处包含空字符串、Python re.split()与split()、python split()vs rsplit()性能?、python – 带字符串split()的身份怪癖的有价值信息。

本文目录一览:

为什么python字符串split()不分裂(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():我希望它在结尾处包含空字符串

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()

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 split()vs rsplit()性能?

我在python中有一个字符串。我想用maxsplit = 1分隔符将其拆分,该分隔符非常接近字符串的结尾。

例如

a = "abcdefghijklmnopqrstuvwxyz,1".

a.split(",",1)在性能方面会更好a.rsplit(",1)吗?

python – 带字符串split()的身份怪癖

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()的身份怪癖的相关信息,请在本站寻找。

本文标签: