2014-02-08 34 views
0

在Python程序,我有蟒蛇如果列表超過20個字符縮短到20,如果是小於20個字符,加0,使其20

... 
wf = raw_input("enter string \n") 
wl = list(wf) 
wd = wl[:-4] 
#now I want to see if wl is over 20 characters 
#if it is, I want it truncated to 20 characters 
#if not, I want character appended until it is 20 characters 
#if it is 20 characters leave it alone 
... 

請與具有東西評論幫助做什麼它說

+0

[位於列表中數字前面0的可能重複,如果它們小於10(在python中)](http://stackoverflow.com/questions/7656754/place-a-0-in-front -of-numbers-in-a-list-if-they-is-less-in-python) – devnull

+2

這個問題似乎是無關緊要的,因爲它是關於爲你製作代碼的。 –

+0

@MaximeLorant我找不到一個特定的函數來調用,以便我可以追加0.我嘗試了一些不同的東西,但它們不起作用。我從來沒有聽說過str的zfill屬性,也沒有聽說過rjust/ljust。它沒有在我關於Python的書中提及它們。 – pokeswap

回答

4

最簡單的方法是用切片和str.zfill功能,這樣

data = "abcd" 
print data[:20].zfill(20)  # 0000000000000000abcd 

dataabcdefghijklmnopqrstuvwxyz,該出賣出期權

abcdefghijklmnopqrst 

注:如果你真正的意思,追加零,您可以使用str.ljust功能,這樣

data = "abcdefghijklmnopqrstuvwxyz" 
print data[:20].ljust(20, "0")  # abcdefghijklmnopqrst 

data = "abcd" 
print data[:20].ljust(20, "0")  # abcd0000000000000000 

優勢利用ljustrjust的是,我們可以隨心所欲的使用填充字符。

+0

很有意思。有沒有填充前綴的函數? –

+1

@GrijeshChauhan你可以使用['ljust'](http://docs.python.org/2/library/stdtypes.html#str.ljust)和['rjust'](http://docs.python.org /2/library/stdtypes.html#str.rjust)。檢查這些鏈接。 :) – thefourtheye

+0

感謝您的鏈接:) –

3

使用str.format

>>> '{:0<20.20}'.format('abcd') # left align 
'abcd0000000000000000' 
>>> '{:0>20.20}'.format('abcd') # right align 
'0000000000000000abcd' 
>>> '{:0<20.20}'.format('abcdefghijklmnopqrstuvwxyz') 
'abcdefghijklmnopqrst' 

format

>>> format('abcd', '0<20.20') 
'abcd0000000000000000' 
>>> format('abcdefghijklmnopqrstuvwxyz', '0<20.20') 
'abcdefghijklmnopqrst' 

關於格式規範使用:

0: fill character. 
<, >: left, right align. 
20: width 
.20: precision (for string, limit length) 
+0

我試圖理解你的伎倆但我不能。你能解釋我的格式字符串爲'0 <20嗎?20' –

+0

@GrijeshChauhan,在我的回答中,給出了有關規範'0 <20.20'的解釋。請讓我知道哪一部分很難得到。 – falsetru

+0

@falsetrue是我再次閱讀,嘗試在我的系統上。現在完全得到它謝謝!真的很有趣。 –

0

一個簡單的可以是(閱讀評論):

def what(s): 
    l = len(s) 
    if l == 20: # if length is 20 
    return s # return as it is 
    if l > 20: # > 20 
    return s[:20] # return first 20 
    else: 
    return s + '0' * (20 - l) # add(+) (20 - length)'0's 

print what('bye' * 3) 
print what('bye' * 10) 
print what('a' * 20) 

輸出:

$ python x.py 
byebyebye00000000000 
byebyebyebyebyebyeby 
aaaaaaaaaaaaaaaaaaaa 
0

如果你想用它來工作,作爲一個列表,如前所述,然後list comprehension將讓你有:

my_data = 'abcdef' 

my_list = list(my_data) 
my_list = [my_list[i] if i < len(my_list) else 0 for i in range(20)] 

print my_list 

輸出:

['a', 'b', 'c', 'd', 'e', 'f', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

這也涵蓋了> = 20個字符的情況。

相關問題