2017-10-15 270 views
2

如何更改字符串的順序? 例如更改python中字符串的順序

mys='4002-10-21' 

預期結果:

'4002-21-10' 

我曾嘗試:

我可以枚舉分裂字符串,然後再安排諸如1-3-2

newlist=list() 
for i, v in enumerate(mys.split('-')): 
    newlist.append(v) 
序列
+3

那麼你的方法有什麼問題? – mentalita

+0

你想改變從'yyyy-mm-dd'到'yyyy-dd-mm'的日期嗎? –

+0

@VanPeer是的。我想改變日期,但它是熊貓字符串對象的一部分。所以尋找字符串函數。 – shantanuo

回答

2

您可以拆分-,然後重新加入-作爲分隔符,但是si mply重新排序,因爲你需要:

>>> s = '4002-10-21' 
>>> d = s.split('-') 
>>> new_s = "-".join((d[0], d[2], d[1])) 
'4002-21-10' 

,或在不join,拆分後,你可以簡單地做:

new_s = "{}-{}-{}".format(d[0], d[2], d[1]) 
2

你可以試試這個:

mys='4002-10-21' 
m = mys.split("-") 
new_mys = m[0]+"-"+'-'.join(m[1:][::-1]) 

輸出:

'4002-21-10' 
3

鑑於這個問題的背景下,你的做法是罰款:

mys = '4002-10-21' 
parts = mys.split('-') 
mys = parts[0] + '-' + parts[2] + '-' + parts[1] 
print(mys) # "4002-21-10" 

它是脆的肯定,但如果是爲了個人或一次性腳本,誰在乎呢?如果您需要更多的靈活性,那麼您需要更加明確地描述約束條件的性質。

3

考慮:

mys='4002-10-21' 

你可以簡單地寫了它的功能,如本:

def change_order(string, split_char, *args): 
    string = string.split(split_char) 

    new_list = [] 

    for i in args: 
     try: 
      new_list.append(string[i]) # change to i-1 for abstracted parameters 
     except IndexError: 
      return False 

    return split_char.join(new_list) 

其與1, 3, 2(實際的代碼中給出​​需要1了,因爲它是零索引)重新排序給出:

>>> test.change_order('4002-10-21', '-', 0, 2, 1) 
'4002-21-10' 
3

一個好方法是使用r egular表達式這種方式我猜想可以有不同的長度,例如:'4002-21-1'也可以正常工作。

import re 

    mys = '4002-21-10' 

    parts = re.findall('[\d]+', mys) # finds all numbers that are next to each other 
    print(parts) # just so you see what is created 

    formatted_mys = parts[0] + "-" + parts[2] + "-" + parts[1] # put the parts together in the way you wanted 

如果您希望的話,您可以刪除print行。還有很多其他的方法可以做你想做的事情,但如果你需要它是靈活的,這就是我的建議。

7

隨着operator.itemgetter你可以得到多個項目進行單個呼叫:

>>> from operator import itemgetter 
>>> '-'.join(itemgetter(0,2,1)(mys.split('-'))) 
'4002-21-10' 

隨着string format你可以從參數挑選值:

>>> "{0}-{2}-{1}".format(*mys.split('-')) 
'4002-21-10' 

隨着re.sub,您可以捕捉組和重新排序(假設數字):

>>> import re 
>>> re.sub(r'(\d+)-(\d+)-(\d+)', r'\1-\3-\2', mys) 
'4002-21-10' 

I F你需要這pandas(如在評論暗示),您可以使用這兩個DataFrame.replaceSeries.str.replace基於正則表達式的方法,例如(添加inplace=True就地潛艇):

>>> import pandas as pd 
>>> df = pd.DataFrame({'dates': ['4002-10-21']}) 
>>> df.dates.replace(r'(\d+)-(\d+)-(\d+)', r'\1-\3-\2', regex=True) 
0 4002-21-10 
Name: dates, dtype: object 
9

如果你真的想只是格式化的時間字符串,我建議你解析字符串爲datetime對象,並對其進行格式化,你想:

import datetime                     

def rearrange(*args):                    
    return [datetime.datetime.strptime(arg, '%Y-%m-%d').strftime('%Y-%d-%m') for arg in args] 

>>> rearrange('4002-10-21', '4002-10-28') 
['4002-21-10', '4002-28-10'] 
2
L='4002-10-21' 
L=L.split("-") 
L[i:3] = L[2:0:-1] 
"-".join(L) 

您可以使用切片。