例如,我有字符串s1 = "lets go to the mall"
和第二个字符串s2 = "hello"
在Python中,我如何操纵s2
字符串以等于s1
的长度。
s2
看起来像:
s2 = "hellohellohellohell"
与s1
的字符数相同。
答案 0 :(得分:4)
这是一种方法:
s1 = 'lets go to the mall'
s2 = 'hello'
s2 = ''.join(s2[i % len(s2)] for i in range(len(s1)))
print(s2) # "hellohellohellohell"
编辑:以下是对那些不熟悉Python或编程的人的解释=]
''.join(...)
接受 iterable ,这是你可以迭代的东西,并将所有这些元素与空字符串连接在一起。所以,如果里面的内容是可迭代的字母,它会将所有这些字母连接在一起。range(len(s1))
生成所有数字0
到len(s1) - 1
的可迭代。此可迭代中的数字数等于s1
的长度。s2[i]
表示索引s2
中字符串i
中的字母。因此,如果s2 = 'hello'
,则s2[0] = 'h'
,s2[1] = 'e'
等i % len(s2)
表示i
模len(s2)
,或i
除以s2
长度时的余数。s2
所需的次数,以便获得len(s1)
多个字母,然后将它们连接在一起中间的空字符串。答案 1 :(得分:2)
Itertools就是答案。更具体地说,takewhile
和cycle
import itertools
s1 = "lets go to the mall"
s2 = "Hello"
print ("".join(s for _, s in itertools.takewhile(lambda t: t[0] < len(s1), enumerate(itertools.cycle(s2)))))
甚至更简单(使用islice
):
print ("".join(itertools.islice(itertools.cycle(s2)), len(s1)))
答案 2 :(得分:1)
//
是整数除法,它找到整数倍。
%
是模数(余数)
将s2
的次数乘以s1
,然后使用切片添加s2
的剩余部分。
s3 = s2 * (len(s1) // len(s2)) + s2[:(len(s1) % len(s2))]
>>> s3
'hellohellohellohell'
答案 3 :(得分:0)
(s2 * (len(s1)//len(s2) + 1))[:len(s1)]
答案 4 :(得分:0)
基本上将s2
乘以分割的两个长度的math.floor
,然后添加字符串的其余部分:
def extend(s1, s2):
return s2*int(math.floor(len(s1)/len(s2)))+s2[:len(s1) % len(s2)]
>>> extend("lets go to the mall", "hello")
'hellohellohellohell'
>>>
答案 5 :(得分:0)
离开我的头顶,你必须原谅我,你可以使用这样的功能:
def string_until_whenever(s1, s2):
i = len(s1)
x = 0
newstring = ""
while i != 0:
newstring = newstring + s2[x]
x += 1
i -= 1
if x == len(s2) - 1:
x = 0
return newstring
答案 6 :(得分:0)
低效但简单。 (乘法使字符串比它需要的长得多。)
n = len(s1)
s3 = (s2*n)[:n]
答案 7 :(得分:0)
我认为有很多可能的解决方案。在许多可能的解决方案中,我的答案是:
s2 = s2*(len(s1)/len(s2)+1)
s2 = s2[0:len(s1)]
答案 8 :(得分:0)
可能不是最干净的解决方案,但你也可以使用字符串乘法和字符串切片来做到这一点:
def string_until_whenever(s1, s2):
temp = ""
if len(s2) > len(s1):
temp = s2
s2 = s1
s1 = temp
new_string = ""
multiply_by = len(s1)/len(s2)
modulo = len(s1) % len(s2)
new_string = s2 * multiply_by
new_string = new_string + s2[0:modulo]
return new_string
print(string_until_whenever("lets go to the mall", "hello"))
#Outputs: hellohellohellohell