คุณแปลงสตริงเป็นรายการได้อย่างไร?
Say text = "a,b,c"
สตริงเป็นเหมือน หลังจากการแปลงที่text == ['a', 'b', 'c']
และหวังว่าtext[0] == 'a'
, text[1] == 'b'
?
คุณแปลงสตริงเป็นรายการได้อย่างไร?
Say text = "a,b,c"
สตริงเป็นเหมือน หลังจากการแปลงที่text == ['a', 'b', 'c']
และหวังว่าtext[0] == 'a'
, text[1] == 'b'
?
คำตอบ:
แบบนี้:
>>> text = 'a,b,c'
>>> text = text.split(',')
>>> text
[ 'a', 'b', 'c' ]
หรือคุณสามารถใช้eval()
หากคุณเชื่อมั่นว่าสตริงจะปลอดภัย:
>>> text = 'a,b,c'
>>> text = eval('[' + text + ']')
เพียงเพื่อเพิ่มคำตอบที่มีอยู่: หวังว่าคุณจะพบบางสิ่งเช่นนี้ในอนาคต
>>> word = 'abc'
>>> L = list(word)
>>> L
['a', 'b', 'c']
>>> ''.join(L)
'abc'
แต่สิ่งที่คุณกำลังจัดการอยู่ตอนนี้ไปกับคำตอบของ@ Cameron
>>> word = 'a,b,c'
>>> L = word.split(',')
>>> L
['a', 'b', 'c']
>>> ','.join(L)
'a,b,c'
รหัส Python ต่อไปนี้จะเปลี่ยนสตริงของคุณให้เป็นรายการสตริง:
import ast
teststr = "['aaa','bbb','ccc']"
testarray = ast.literal_eval(teststr)
json
ตัวอย่าง:json.loads(teststr)
ใน python คุณแทบไม่จำเป็นต้องแปลงสตริงเป็นรายการเนื่องจากสตริงและรายการมีความคล้ายคลึงกันมาก
หากคุณมีสตริงที่ควรเป็นอาร์เรย์อักขระให้ทำดังนี้
In [1]: x = "foobar"
In [2]: list(x)
Out[2]: ['f', 'o', 'o', 'b', 'a', 'r']
โปรดทราบว่า Strings นั้นเหมือนกับรายการใน python มาก
In [3]: x[0]
Out[3]: 'f'
In [4]: for i in range(len(x)):
...: print x[i]
...:
f
o
o
b
a
r
สตริงคือรายการ เกือบ.
ในกรณีที่คุณต้องการแบ่งตามช่องว่างคุณสามารถใช้.split()
:
a = 'mary had a little lamb'
z = a.split()
print z
เอาท์พุต:
['mary', 'had', 'a', 'little', 'lamb']
()
คือไม่มีอะไรเลย
หากคุณต้องการอาร์เรย์จริง:
>>> from array import array
>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> myarray = array('c', text)
>>> myarray
array('c', 'abc')
>>> myarray[0]
'a'
>>> myarray[1]
'b'
หากคุณไม่ต้องการอาร์เรย์และต้องการดูโดยดัชนีที่อักขระของคุณเท่านั้นโปรดจำไว้ว่าสตริงสามารถทำซ้ำได้เช่นเดียวกับรายการยกเว้นข้อเท็จจริงที่ว่าไม่เปลี่ยนรูป:
>>> text = "a,b,c"
>>> text = text.replace(',', '')
>>> text[0]
'a'
m = '[[1,2,3],[4,5,6],[7,8,9]]'
m= eval(m.split()[0])
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
คำตอบทั้งหมดเป็นสิ่งที่ดีมีอีกวิธีในการทำนั่นคือการทำความเข้าใจรายการดูวิธีแก้ปัญหาด้านล่าง
u = "UUUDDD"
lst = [x for x in u]
สำหรับรายการที่คั่นด้วยลูกน้ำให้ทำดังต่อไปนี้
u = "U,U,U,D,D,D"
lst = [x for x in u.split(',')]
ฉันมักจะใช้:
l = [ word.strip() for word in text.split(',') ]
strip
พื้นที่ลบรอบคำ
ในการแปลงการstring
มีแบบฟอร์มที่a="[[1, 3], [2, -6]]"
ฉันเขียนโค้ด แต่ยังไม่ได้ปรับให้เหมาะสม
matrixAr = []
mystring = "[[1, 3], [2, -4], [19, -15]]"
b=mystring.replace("[[","").replace("]]","") # to remove head [[ and tail ]]
for line in b.split('], ['):
row =list(map(int,line.split(','))) #map = to convert the number from string (some has also space ) to integer
matrixAr.append(row)
print matrixAr
# to strip `,` and `.` from a string ->
>>> 'a,b,c.'.translate(None, ',.')
'abc'
คุณควรใช้translate
วิธีการในตัวสำหรับสตริง
พิมพ์help('abc'.translate)
ที่ Python shell เพื่อดูข้อมูลเพิ่มเติม
การใช้ Python ที่ใช้งานได้:
text=filter(lambda x:x!=',',map(str,text))
ตัวอย่าง 1
>>> email= "myemailid@gmail.com"
>>> email.split()
#OUTPUT
["myemailid@gmail.com"]
ตัวอย่าง 2
>>> email= "myemailid@gmail.com, someonsemailid@gmail.com"
>>> email.split(',')
#OUTPUT
["myemailid@gmail.com", "someonsemailid@gmail.com"]
split()
เป็นเพื่อนของคุณที่นี่ ฉันจะพูดถึงบางแง่มุมsplit()
ที่ไม่ครอบคลุมโดยคำตอบอื่น ๆ
split()
จะแบ่งสตริงตามอักขระเว้นวรรค (ช่องว่างแท็บและขึ้นบรรทัดใหม่) ช่องว่างนำหน้าและต่อท้ายจะถูกละเว้น นอกจากนี้ช่องว่างที่ติดต่อกันจะถือว่าเป็นตัวคั่นตัวเดียวตัวอย่าง:
>>> " \t\t\none two three\t\t\tfour\nfive\n\n".split()
['one', 'two', 'three', 'four', 'five']
split()
ทำงานแตกต่างจากพฤติกรรมเริ่มต้น ในกรณีนี้ตัวคั่นนำหน้า / ต่อท้ายจะไม่ถูกเพิกเฉยตัวคั่นที่ทำซ้ำจะไม่ "รวมกัน" เป็นตัวเดียวตัวอย่าง:
>>> ",,one,two,three,,\n four\tfive".split(',')
['', '', 'one', 'two', 'three', '', '\n four\tfive']
ดังนั้นหากต้องการขีดฆ่าช่องว่างในขณะที่แยกสตริงโดยใช้ตัวคั่นที่ไม่ใช่ช่องว่างให้ใช้โครงสร้างนี้:
words = [item.strip() for item in string.split(',')]
ตัวอย่าง:
>>> "one,two,three,,four".split(',,')
['one,two,three', 'four']
ในการรวมตัวคั่นหลายตัวเข้าด้วยกันคุณจะต้องใช้re.split(regex, string)
วิธีการ ดูโพสต์ที่เกี่ยวข้องด้านล่าง