iT邦幫忙

1

python3 字串處理問題

  • 分享至 

  • xImage

大神們好,我是python新手,有個小問題想請教大神們。

假如有個字串是="33 C0 FA 8E D8 8E D0 BC 00 7C"
想將兩個值為一組連接起來,變成:['33C0','FA8E','D88E','D0BC','007C']
list或string形式都可以,請問該怎麼轉換呢

lasteva iT邦新手 5 級 ‧ 2018-03-25 12:17:53 檢舉
好熟悉呀!這是雷達信號?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
暐翰
iT邦大師 1 級 ‧ 2018-03-24 09:05:47

我沒寫過python嘗試寫寫看 :-)

以下是我的邏輯:


第一步用split以" "切割

str = "33 C0 FA 8E D8 8E D0 BC 00 7C";
print str.split( );

第二步用索引 配合 %2(mod 2) 來組合就可以

    
str = "33 C0 FA 8E D8 8E D0 BC 00 7C";
list = str.split( ); 
print str.split( ); #['33', 'C0', 'FA', '8E', 'D8', '8E', 'D0', 'BC', '00', '7C']

list_mod_1 = []; 
list_mod_0 = [];
index = 0;
for item in list:
    index = index + 1;
    if(index % 2 == 1):
        list_mod_1.append(item);
    if(index % 2 == 0): 
        list_mod_0.append(item);
print list_mod_1; # ['33', 'FA', 'D8', 'D0', '00']
print list_mod_0; # ['C0', '8E', '8E', 'BC', '7C']

index = 0;
list_total = [];
for item in list_mod_1:
    list_total.append(list_mod_1[index] +list_mod_0[index]);
    index = index + 1;
print list_total; # ['33C0', 'FA8E', 'D88E', 'D0BC', '007C']

sleepgary iT邦新手 5 級 ‧ 2018-03-24 15:20:39 檢舉

感謝幫助~~受教了!

5
froce
iT邦大師 1 級 ‧ 2018-03-24 09:49:28
import re
s = "33 C0 FA 8E D8 8E D0 BC 00 7C"
print(re.findall(r"\w{4}", s.replace(" ","")))  #利用正規表示法,把去掉空白的s,每4個分成一組。

sleepgary iT邦新手 5 級 ‧ 2018-03-24 15:22:40 檢舉

感謝解惑,這個方法很簡潔,學習了!!

froce iT邦大師 1 級 ‧ 2018-03-24 19:47:37 檢舉

其實也有只有1行還不用 import 任何模組的,只是比較難看懂。

s = "33 C0 FA 8E D8 8E D0 BC 00 7C"
print(["".join(s.split(" ")[i:i+2]) for i in range(0, len(s.split(" ")), 2)])
sleepgary iT邦新手 5 級 ‧ 2018-03-25 20:32:28 檢舉

謝謝froce大!!學習了!

1
denny70
iT邦見習生 ‧ 2018-03-25 13:25:26

我喜歡正規表示法的, 簡潔有力

下面也是一種方式,反正一定要讀兩組合為一,所以多加了
if 條件式 達到兩組後 重新在組合兩組數據

str="33 C0 FA 8E D8 8E D0 BC 00 7C"

li=str.split(' ')

i=0
temp=''
res=[]
for item in li:
    temp+=item
    i+=1
    if i ==2 :
        res.append(temp)
        temp=''
        i=0
print res  #res=['33C0', 'FA8E', 'D88E', 'D0BC', '007C']
sleepgary iT邦新手 5 級 ‧ 2018-03-25 20:33:25 檢舉

這個想法也很厲害,學習了!

我要發表回答

立即登入回答