在join()中的分隔符列表中旋转

2024-05-13 12:32:33 发布

您现在位置:Python中文网/ 问答频道 /正文

如何循环使用字符串中的分隔符列表

我试图引用this post,但如果enumerate是一种正确的方法,我就不会这样做

my_list = range(11, 17)
# formats = ['#', '$', '%']
# How to implement formats?
my_string = '#'.join(map(str, my_list))
my_string

# have: '11#12#13#14#15#16'
# want: '11#12$13%14#15$16'

Tags: to方法字符串列表stringmyrangeimplement
2条回答

您可以将itertools.cyclezip结合使用:

from itertools import cycle

my_list = range(11, 17)
formats = cycle(['#', '$', '%'])

''.join(str(a) + b for a, b in zip(my_list, formats))

这将产生'11#12$13%14#15$16%'。注意后面的%字符。。您可以手动删除该文件,例如,通过将文件切片到-1

''.join(str(a) + b for a, b in zip(my_list, formats))[:-1]

顺便说一下,如果这是您在代码库中经常遇到的问题,您可以编写一个帮助器类,例如

from itertools import cycle


class MultiDelimiter:
    def __init__(self, *delimiters):
        self.delimiters = delimiters
        
    def join(self, strings):
        joined = ''.join(s + d for s, d in zip(strings, cycle(self.delimiters)))
        return joined[:-1]
    
            
my_list = ['11', '12', '13', '14', '15', '16']
            
delim = MultiDelimiter('#', '$', '%')
delim.join(my_list)  # returns: "11#12$13%14#15$16"

这使用了与string.join相同的约定,这有助于代码的可读性/维护

您可以使用mod 3(i%3)来确定需要使用哪个索引值。在这里,我使用mod 3来实现它,因为格式的长度是3

下面是实现

my_list = range(11, 17)
formats = ['#', '$', '%']
mystring = ''.join(str(i)+formats[(i+1)%3] for i in my_list)[:-1]
print (mystring)

因为我们使用的是join,所以它也包含最后一个范围编号。所以我们需要排除最后一个位置。为此,我使用[:-1]

其输出为:

11#12$13%14#15$16

如果要使其通用,可以执行以下操作:

mystring = ''.join(str(j)+formats[i%len(formats)] for i,j in enumerate(my_list))[:-1]

以下是以下范围的结果:

formats = ['#', '$', '%']
my_list = range(11, 25)

11#12$13%14#15$16%17#18$19%20#21$22%23#24

formats = ['#', '$', '%']
my_list = range(12, 25)

12#13$14%15#16$17%18#19$20%21#22$23%24

formats = ['#', '$', '%']
my_list = range(13, 25)

13#14$15%16#17$18%19#20$21%22#23$24

formats = ['#', '$', '%']
my_list = range(14, 25)

14#15$16%17#18$19%20#21$22%23#24

formats = ['#', '$', '%']
my_list = range(15, 25)

15#16$17%18#19$20%21#22$23%24

my_list = range(11, 25)
formats = ['#', '$', '%', '&','@']

11#12$13%14&15@16#17$18%19&20@21#22$23%24

my_list = range(12, 25)
formats = ['#', '$', '%', '&']

12#13$14%15&16#17$18%19&20#21$22%23&24

如果通用代码在任何情况下失败,请告诉我

相关问题 更多 >