如何更改字符串的順序? 例如更改python中字符串的順序
mys='4002-10-21'
預期結果:
'4002-21-10'
我曾嘗試:
我可以枚舉分裂字符串,然後再安排諸如1-3-2
newlist=list()
for i, v in enumerate(mys.split('-')):
newlist.append(v)
序列
如何更改字符串的順序? 例如更改python中字符串的順序
mys='4002-10-21'
預期結果:
'4002-21-10'
我曾嘗試:
我可以枚舉分裂字符串,然後再安排諸如1-3-2
newlist=list()
for i, v in enumerate(mys.split('-')):
newlist.append(v)
序列
您可以拆分-
,然後重新加入-
作爲分隔符,但是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])
你可以試試這個:
mys='4002-10-21'
m = mys.split("-")
new_mys = m[0]+"-"+'-'.join(m[1:][::-1])
輸出:
'4002-21-10'
鑑於這個問題的背景下,你的做法是罰款:
mys = '4002-10-21'
parts = mys.split('-')
mys = parts[0] + '-' + parts[2] + '-' + parts[1]
print(mys) # "4002-21-10"
它是脆的肯定,但如果是爲了個人或一次性腳本,誰在乎呢?如果您需要更多的靈活性,那麼您需要更加明確地描述約束條件的性質。
考慮:
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'
一個好方法是使用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
行。還有很多其他的方法可以做你想做的事情,但如果你需要它是靈活的,這就是我的建議。
隨着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.replace
和Series.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
如果你真的想只是格式化的時間字符串,我建議你解析字符串爲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']
L='4002-10-21'
L=L.split("-")
L[i:3] = L[2:0:-1]
"-".join(L)
您可以使用切片。
那麼你的方法有什麼問題? – mentalita
你想改變從'yyyy-mm-dd'到'yyyy-dd-mm'的日期嗎? –
@VanPeer是的。我想改變日期,但它是熊貓字符串對象的一部分。所以尋找字符串函數。 – shantanuo