Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将列表中的所有术语一分为二?_Python_List_Split - Fatal编程技术网

Python 如何将列表中的所有术语一分为二?

Python 如何将列表中的所有术语一分为二?,python,list,split,Python,List,Split,我需要将一个字符串拆分为一个列表,然后拆分该列表中的所有项。我一直在尝试为这个做一个函数,但我不知道怎么做。我使用此函数将字符串一分为二: def split_case(string): length_string = len(string) first_length = round(length_string / 2) first_half = string[0:first_length] second_half = string[first_length:]

我需要将一个字符串拆分为一个列表,然后拆分该列表中的所有项。我一直在尝试为这个做一个函数,但我不知道怎么做。我使用此函数将字符串一分为二:

def split_case(string):
    length_string = len(string)
    first_length = round(length_string / 2)
    first_half = string[0:first_length]
    second_half = string[first_length:]
    return [first_half, second_half]
我需要做这样的事情:

def split_all(string,runs):
    ...
    return split_up
>>>print(split_all("Hello World!",1)
>>>["Hello ", "World!"]
输出结果如下所示:

def split_all(string,runs):
    ...
    return split_up
>>>print(split_all("Hello World!",1)
>>>["Hello ", "World!"]
“runs”参数是字符串被拆分的次数,所以一个是一半,二个是四分之一,三个是八分之一,四个是十六分之一,依此类推

>>>print(split_all("Spam",2)
>>>["S","p","a","m"]


谢谢你的帮助

您可以递归调用以拆分字符串:

def split_str(args, runs=1):
    if not runs:
        return [args]
    else:
        runs -= 1
        h = len(args)//2
        beginning = args[:h]
        remaining = args[h:]
        return split_str(beginning, runs) + split_str(remaining, runs)
输出:

>>> split_str('Hello World!', 1)
>>> ['Hello ', 'World!']
>>> split_str('Hello World!', 2)
>>> ['Hel', 'lo ', 'Wor', 'ld!']
>>> split_str('spam', 2)
>>> ['s', 'p', 'a', 'm']
['Hel', 'lo', ' Wo', 'rl', 'd, ', 'Ag', 'ai', 'n!']
['He', 'll', 'o ', 'Wor', 'ld', ', A', 'ga', 'in!']
['hel', 'lo ', 'wor', 'd']

不清楚拆分奇数长度的字符串时要执行什么操作,例如,
split_case('hello')
返回
['hel','lo']
['he','llo']

下面是一个可能的解决方案,其中包含一个决定此行为的关键字参数:

def split_case(string, first_half_longer=True):
    string_length = len(string)
    split_length = string_length // 2
    if (string_length % 2 != 0) and first_half_longer:
        split_length += 1
    return [string[:split_length], string[split_length:]]


def split_all(string, runs, first_half_longer=True):
    original_string_list = [string]
    new_string_list = []
    for run in range(runs):
        for i in original_string_list:
            new_string_list.extend(split_case(i, first_half_longer))
        original_string_list = new_string_list
        new_string_list = []

    return original_string_list


string = "Hello World, Again!"

print(split_all(string, 3, True))
print(split_all(string, 3, False))
输出:

>>> split_str('Hello World!', 1)
>>> ['Hello ', 'World!']
>>> split_str('Hello World!', 2)
>>> ['Hel', 'lo ', 'Wor', 'ld!']
>>> split_str('spam', 2)
>>> ['s', 'p', 'a', 'm']
['Hel', 'lo', ' Wo', 'rl', 'd, ', 'Ag', 'ai', 'n!']
['He', 'll', 'o ', 'Wor', 'ld', ', A', 'ga', 'in!']
['hel', 'lo ', 'wor', 'd']

一种先计算子串的数量,然后将其全部累加的方法

def split_case(str, runs):
    l = len(str)
    res = []

    splitCnt = 2 ** runs
    if splitCnt >= l:
        splitCnt = l

    if (l % splitCnt == 0):
        runLen = l / splitCnt
    else:
        runLen = l / splitCnt + 1

    for i in range(0, l, runLen):
        res.append(str[i:i+runLen])

    return res

print(split_case("hello word", 2))
输出:

>>> split_str('Hello World!', 1)
>>> ['Hello ', 'World!']
>>> split_str('Hello World!', 2)
>>> ['Hel', 'lo ', 'Wor', 'ld!']
>>> split_str('spam', 2)
>>> ['s', 'p', 'a', 'm']
['Hel', 'lo', ' Wo', 'rl', 'd, ', 'Ag', 'ai', 'n!']
['He', 'll', 'o ', 'Wor', 'ld', ', A', 'ga', 'in!']
['hel', 'lo ', 'wor', 'd']
使用的简短方法

导入文本包装
def split_all(字符串,n):
返回text wrap.wrap(字符串,int(len(字符串)/2**n+1))
打印(全部拆分(“你好,世界又来了!”,2))
#['Hello'、'World'、'Aga'、'in!']
打印(全部拆分(“你好,世界又来了!”,3))
#[Hel',lo',Wor',ld',Aga',in!']

将第一个函数转换为一行:
def split_str(string):返回string[:len(string)//2],string[len(string)//2:///code>所需输出的语义是什么?把每个字都切成两半?如果不均匀,单词的第一或第二部分应该是较长的部分,还是组成第三个元素?好的,那么你有一个可以将字符串一分为二的函数。你想把所有的弦剪成两半,一定次数。你知道要做多少次。到底是什么问题?例如,是否将“将字符串一分为二”应用于所有现有片段?此外,只是为了确保-您是否关心单词边界?例如,
split\u all(“extremelylongword short”,1)
的输出应该是什么?谢谢,我并不是真的为字符串的哪个部分更长而烦恼,但这一部分让我可以选择;太酷了@石榴和蟒蛇因为你还没有投票权,所以你将使用它,特别是当很多人花时间提出解决你问题的方案时。