首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python -可按字符串进行迭代,并进行相同长度的拆分。

python -可按字符串进行迭代,并进行相同长度的拆分。
EN

Stack Overflow用户
提问于 2016-06-15 15:58:53
回答 3查看 110关注 0票数 1

我有一个生成器对象,如下所示:

代码语言:javascript
复制
a = ["ab", "fasj", "sfk", "sfsfg", "ab", "gwre", "ab", "werwe", "fsfj", "lke"]

使用python,如何根据"ab“的出现将其分割成相同长度的块?

我在找这样的东西:

代码语言:javascript
复制
b = ["ab", "fasj", "sfk", "sfsfg"]
c = ["ab", "gwre", " ", " "]
d = ["ab", "werwe", "fsfj", "lke"]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-15 16:20:01

以下代码并不完美,但完成了任务(如果我正确理解了您的问题):

代码语言:javascript
复制
array = ["ab", "fasj", "sfk", "sfsfg", "ab", "gwre", "ab", "werwe", "fsfj", "lke"]

def split(l):
    def internal():
        stack = []
        for v in l:
            if v == "ab":
                if stack:
                    yield stack
                stack = []

            stack.append(v)

        if stack:
            yield stack

    ret = list(internal())
    size = max(map(len, ret))

    return [x + [" "] * (size - len(x)) for x in ret]   


print(split(array))

这将被退回:

代码语言:javascript
复制
[
    ["ab", "fasj", "sfk", "sfsfg"],
    ["ab", "gwre", " ", " "],
    ["ab", "werwe", "fsfj", "lke"]
]

编辑: OP刚刚声明,下一个ab的最大长度是4。这将大大简化代码:

代码语言:javascript
复制
array = ["ab", "fasj", "sfk", "sfsfg", "ab", "gwre", "ab", "werwe", "fsfj", "lke"]

def split(l):
    stack = []
    for v in l:
        if v == "ab":
            if stack:
                yield stack + [" "] * (4 - len(stack))

            stack = []

        stack.append(v)

    if stack:
        yield stack + [" "] * (4 - len(stack))

print(list(split(array)))
票数 3
EN

Stack Overflow用户

发布于 2016-06-15 16:43:53

这段代码不太清晰,但它可能会奏效。一定要自己验证,看看它是否正确地回答了你的问题。

代码语言:javascript
复制
listOfLists = []
newList = []
count = 0
for i in a:
    if i == "ab":
        if newList:
            listOfLists.append(newList)
        count = 0
        newList = [" "]*5
        newList[count] = i
        count += 1
    else:
        newList[count] = i
        count += 1
listOfLists.append(newList)
票数 1
EN

Stack Overflow用户

发布于 2016-06-15 16:48:04

下面是我使用numpy.splitlist comprehension的Pythonic方法

代码语言:javascript
复制
import numpy as np
rslt = [list(x) for x in np.split(np.array(a), [i for i, x in enumerate(a) if x=="ab"][1:])]
maxlen = max(len(x) for x in rslt)
rslt = [x+['']*(maxlen-len(x)) if len(x)<maxlen else x for x in rslt ]

解释:

代码语言:javascript
复制
In [149]: rslt = [list(x) for x in np.split(np.array(a), [i for i, x in enumerate(a) if x=="ab"][1:])]

In [150]: rslt
Out[150]: 
[['ab', 'fasj', 'sfk', 'sfsfg'],
 ['ab', 'gwre'],
 ['ab', 'werwe', 'fsfj', 'lke']]

In [151]: maxlen = max(len(x) for x in rslt)

In [152]: maxlen
Out[152]: 4

In [153]: rslt = [x+['']*(maxlen-len(x)) if len(x)<maxlen else x for x in rslt ]

In [154]: rslt
Out[154]: 
[['ab', 'fasj', 'sfk', 'sfsfg'],
 ['ab', 'gwre', '', ''],
 ['ab', 'werwe', 'fsfj', 'lke']]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37840406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档