2016-08-18 204 views
0

例如,我有字符串s1 = "lets go to the mall" 和第二串s2 = "hello"如何操縱一個字符串等於另一個字符串的長度?

在Python,如何可以操縱s2串等於的s1長度。

s2那麼會是什麼樣子:

s2 = "hellohellohellohell"這將具有相同的字符數爲s1

+1

查看字符串乘法和切片。 – Carcigenicate

+0

python字符串是不可變的,所以你將不能在原地更改's2'。但是,您可以創建一個長度等於's1'的新字符串。 – Wajahat

回答

1

//是發現整個倍數的整數除法。 %是模(餘)

s2我就可以進入s1然後用切片添加的s2剩餘部分的次數。

s3 = s2 * (len(s1) // len(s2)) + s2[:(len(s1) % len(s2))] 

>>> s3 
'hellohellohellohell' 
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(...)需要一個迭代,這是可以遍歷的東西,並將所有這些元素與空白字符串一起加入吐溫。所以,如果裏面的內容是一個可迭代的的字母,它會將所有這些字母連接在一起。
  • range(len(s1))產生可迭代的所有數字0len(s1) - 1。此迭代中的數字數量等於s1的長度。
  • s2[i]表示索引號爲i的字符串s2中的字母。所以,如果s2 = 'hello',然後s2[0] = 'h's2[1] = 'e'
  • i % len(s2)意味着ilen(s2),或剩餘當您的s2長度劃分i
  • 因此,這些代碼首先創建一個循環遍歷s2多次的字母,以便獲得多個字母,然後將它們連同它們之間的空字符串一起加入。
+1

迄今爲止最乾淨的解決方案。 –

+0

而不是一次構建一個字母的字符串,一次構建一個's2'的副本,然後修剪多餘的結尾。 ('len'(s1),len(s2)))[:len(s1)]'(這與其他一些答案相似)。 – chepner

+0

@chepner我認爲這裏的所有解決方案都有優點和缺點。對於這個解決方案,我想通過優化字符串連接和性能來提高可讀性/清潔度。我認爲其他解決方案可能會更快,但我發現這比分片方法更容易理解:) – Karin

0
(s2 * (len(s1)//len(s2) + 1))[:len(s1)] 
0

基本上乘以兩個長度的math.floor分,然後添加字符串的其餘s2

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' 
>>> 
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 
0

效率低下,但很簡單。 (乘法使得字符串比需要的長得多。)

n = len(s1) 
s3 = (s2*n)[:n] 
0

我認爲有很多可能的解決方案。我的答案是:

s2 = s2*(len(s1)/len(s2)+1) 
s2 = s2[0:len(s1)] 
2

Itertools就是答案。更具體地說takewhilecycle

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))) 
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 
相關問題