【问题标题】:split strings in a list by characters按字符拆分列表中的字符串
【发布时间】:2021-03-04 06:08:12
【问题描述】:

我想将“示例”制作成一个由特定模式分隔的列表。像这样:

example = 'abcdefghijklmnopqrstuvwx'

mylist1 = ['abc', 'def', 'ghi','jkl', 'mno', 'pqr','stu','vwx']

mylist2 = ['a','bcd','ef', 'g','hij','kl','m','nop','qr','s','tuv','wx']

mylist3 = ['ab','cde','f','gh','ijk','l','mn','opq','r','st','uvw','x']

mylist2 的模式为 1-3-2,mylist3 的模式为 2-3-1

我可以使用以下代码创建 mylist1:

mylist1 = []
for i in range(0, len(example), 3):
    mylist1.append(example[i:i+3])

但我无法制作 mylist2 和 mylist3。

【问题讨论】:

    标签: python list split


    【解决方案1】:

    这个通用方法怎么样。有更多的pythonic方法可以做到这一点,有人可能会像oneliner一样做。不过有了这段代码,你大概就能明白是怎么回事了。

    def slicer(data, pattern):
        """
        @param data: The string you want to split
        @param pattern: tuple showing pattern you want to use
        @returns: sliced list
        """
        i = 0
        res = []
        while i < len(data): #Continue processing the text until we reach the end
           for slice in pattern:  #Loop through your pattern here
               if data[i:i+slice]:
                   #if there is anything to add, we add it to result.         
                   res.append(data[i:i+slice])
               i += slice
        return res
    

    使用示例

    >>> slicer ("abcdefghijklmnopqrstuvwxyz",(1,2,3))
    ['a', 'bc', 'def', 'g', 'hi', 'jkl', 'm', 'no', 'pqr', 's', 'tu', 'vwx', 'y', 'z']
    
    >>> slicer ("abcdefghijklmnopqrstuvwxyz",(1,3,1))
    ['a', 'bcd', 'e', 'f', 'ghi', 'j', 'k', 'lmn', 'o', 'p', 'qrs', 't', 'u', 'vwx', 'y', 'z']
    

    【讨论】:

      最近更新 更多