2015-01-15 87 views
2

目前我正在學習Python3,並且我已經有一些C的經驗。 我需要移動字符串來擺脫兩個第一個字節。這裏的代碼在C:python中的字符串操作

char *a = "Hello World"; 
a += 2; 
printf ("%s", a) 

這一計劃將輸出「LLO世界」

我不知道是否有在Python有效做這樣的事情的一種方式,而不復制整個字符串。

+1

Python在你的意思上並不習慣於高效。該語言有自己的'Pythonic'代碼約定範例,並且直接使用指針來尋址內存空間並不常見。這個問題的答案都是標準的「Pythonic」做事情的方式 - 將字符串當作字符列表處理,並返回一個包含所需子字符串的新列表。 –

回答

3

Python比C級別更高,並理解字符串是什麼。你可以這樣做:

s = "Hello World" 
print(s[2:]) 

你可以在這裏找到更多:https://docs.python.org/3/tutorial/introduction.html#strings

+5

切片字符串複製元素。 –

+0

那麼,你可以使用[memoryview](https://docs.python.org/3/library/stdtypes.html#memoryview),但在大多數情況下它可能是不值得的,絕對不適合初學者。 – qsantos

2

肯定有,是優於C

a = "Hello World" 
print a[2:] 

這就是所謂的切片

參考圖像

enter image description here

+0

和第三個切片增量的參數,這意味着用[[:: - 1]'你會得到相反的列表 – markcial

+0

@markcial它被稱爲步幅.. :) –

+2

這不會複製切片的元素,不像C代碼。 – interjay

0

FYI:你不需要申報任何變量,你可以直接對字符串進行操作

"Hello world"[2:] # llo world 
4

2.x中最接近的操作是從字符串中創建buffer,然後對其進行切片。創建buffer是附加操作,但只需執行一次,因爲buffer可以重複使用。

>>> a = 'Hello world' 
>>> b = buffer(a) 
>>> print b[2:] 
llo world 
>>> print b[:5] 
Hello 

3.x沒有buffer,但你不應該試圖在Python中模擬C代碼。找出你實際要做的事情,然後爲它編寫適當的Pythonic代碼。

+0

Python 3有'緩衝區'嗎?我知道它有'memoryview',但我認爲這不適用於'str'對象。 – interjay

+1

不,「緩衝區」在3.x中消失了。但是,除非要編寫較慢的代碼,否則不應該試圖在Python中模擬C語言。 –

+0

OP確實說過他在使用Python 3。 – interjay