ฉันพยายามค้นหาคำตอบในการแยกสตริงออกเป็นชุดอักขระ แต่ฉันไม่สามารถหาวิธีง่าย ๆ ได้
str.split(//)
ดูเหมือนจะไม่ทำงานเหมือนทับทิม มีวิธีง่ายๆในการทำเช่นนี้โดยไม่วนซ้ำหรือไม่?
ฉันพยายามค้นหาคำตอบในการแยกสตริงออกเป็นชุดอักขระ แต่ฉันไม่สามารถหาวิธีง่าย ๆ ได้
str.split(//)
ดูเหมือนจะไม่ทำงานเหมือนทับทิม มีวิธีง่ายๆในการทำเช่นนี้โดยไม่วนซ้ำหรือไม่?
คำตอบ:
>>> s = "foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']
คุณต้องการรายการ
cast_method = lambda x: [x]
คุณนำสตริงและส่งไปยังรายการ ()
s = "mystring"
l = list(s)
print l
คุณสามารถทำได้ด้วยวิธีง่ายๆโดยไม่ต้องมีรายการ ():
>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']
for
มีไม่มากที่จะอธิบาย ฉันคิดว่าคุณควรอ่านบทช่วยสอนเกี่ยวกับโครงสร้างข้อมูลโดยเฉพาะรายการความเข้าใจ
list(map(lambda c: c, iter("foobar")))
แต่อ่านได้และมีความหมายมากกว่า
หากคุณต้องการประมวลผลสตริงของคุณหนึ่งตัวอักษรในเวลา คุณมีตัวเลือกต่าง ๆ
uhello = u'Hello\u0020World'
ใช้รายการเข้าใจ:
print([x for x in uhello])
เอาท์พุท:
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
ใช้แผนที่:
print(list(map(lambda c2: c2, uhello)))
เอาท์พุท:
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
ฟังก์ชั่นการโทรในตัวรายการ:
print(list(uhello))
เอาท์พุท:
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
ใช้สำหรับวง:
for c in uhello:
print(c)
เอาท์พุท:
H
e
l
l
o
W
o
r
l
d
ฉันสำรวจอีกสองวิธีเพื่อให้งานนี้สำเร็จ มันอาจจะเป็นประโยชน์สำหรับใครบางคน
คนแรกนั้นง่าย:
In [25]: a = []
In [26]: s = 'foobar'
In [27]: a += s
In [28]: a
Out[28]: ['f', 'o', 'o', 'b', 'a', 'r']
และการใช้ครั้งที่สองmap
และlambda
ฟังก์ชั่น อาจเหมาะสมสำหรับงานที่ซับซ้อนมากขึ้น:
In [36]: s = 'foobar12'
In [37]: a = map(lambda c: c, s)
In [38]: a
Out[38]: ['f', 'o', 'o', 'b', 'a', 'r', '1', '2']
ตัวอย่างเช่น
# isdigit, isspace or another facilities such as regexp may be used
In [40]: a = map(lambda c: c if c.isalpha() else '', s)
In [41]: a
Out[41]: ['f', 'o', 'o', 'b', 'a', 'r', '', '']
ดูpython docsสำหรับวิธีการเพิ่มเติม
งานจะทำการวนซ้ำของอักขระในสตริงและรวบรวมลงในรายการ วิธีการแก้ปัญหาไร้เดียงสามากที่สุดจะมีลักษณะ
result = []
for character in string:
result.append(character)
แน่นอนว่ามันสามารถย่อให้เหลือเพียง
result = [character for character in string]
แต่ยังมีวิธีแก้ปัญหาที่สั้นกว่าที่ทำในสิ่งเดียวกัน
list
คอนสตรัคสามารถใช้ในการแปลงใด ๆiterable (iterators, รายการ, tuples, สตริง ฯลฯ ) เพื่อรายการ
>>> list('abc')
['a', 'b', 'c']
ข้อดีคือมันใช้งานได้ทั้งใน Python 2 และ Python 3
นอกจากนี้เริ่มจาก Python 3.5 (ด้วยPEP 448 ที่ยอดเยี่ยม ) ตอนนี้เป็นไปได้ที่จะสร้างรายการจากการทำซ้ำได้โดยการแกะมันออกเป็นรายการที่ว่างเปล่า:
>>> [*'abc']
['a', 'b', 'c']
นี่คือ neater และในบางกรณีมีประสิทธิภาพมากกว่าการเรียกlist
constructor โดยตรง
ผมแนะนำให้กับการใช้map
วิธีชั่นเพราะmap
ไม่ได้กลับรายการในหลาม 3. ดูวิธีการกรองการใช้แผนที่และลดในหลาม 3
ฉันแค่ต้องการตัวอักษรจำนวนมาก:
arr = list(str)
หากคุณต้องการแยก str ด้วย str เฉพาะ:
# str = "temp//temps" will will be ['temp', 'temps']
arr = str.split("//")
split()
ฟังก์ชั่น inbuilt จะแยกเฉพาะค่าตามเงื่อนไขบางอย่าง แต่ในคำเดียวมันไม่สามารถปฏิบัติตามเงื่อนไข list()
ดังนั้นจึงจะสามารถแก้ไขได้ด้วยความช่วยเหลือของ มันเรียก Array ภายในและจะเก็บค่าไว้บนพื้นฐานของอาเรย์
สมมติ,
a = "bottle"
a.split() // will only return the word but not split the every single char.
a = "bottle"
list(a) // will separate ['b','o','t','t','l','e']
แกะออกจากกล่อง:
word = "Paralelepipedo"
print([*word])
หากคุณต้องการอ่านเฉพาะการเข้าถึงสตริงคุณสามารถใช้รูปแบบอาร์เรย์ได้โดยตรง
Python 2.7.6 (default, Mar 22 2014, 22:59:38)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> t = 'my string'
>>> t[1]
'y'
อาจเป็นประโยชน์สำหรับการทดสอบโดยไม่ต้องใช้ regexp สตริงมีการขึ้นบรรทัดใหม่ที่สิ้นสุดหรือไม่?
>>> t[-1] == '\n'
False
>>> t = 'my string\n'
>>> t[-1] == '\n'
True
ดีมากเท่าที่ฉันชอบเวอร์ชันรายการนี่เป็นอีกวิธีหนึ่งที่ฉันพบ (แต่มันเจ๋งฉันเลยคิดว่าฉันจะเพิ่มมันเข้าไปในการต่อสู้):
>>> text = "My hovercraft is full of eels"
>>> [text[i] for i in range(len(text))]
['M', 'y', ' ', 'h', 'o', 'v', 'e', 'r', 'c', 'r', 'a', 'f', 't', ' ', 'i', 's', ' ', 'f', 'u', 'l', 'l', ' ', 'o', 'f', ' ', 'e', 'e', 'l', 's']
camelcase = ''.join([text[i].upper() if i % 2 else text[i].lower() for i in range(len(text))])
from itertools import chain
string = 'your string'
chain(string)
คล้ายกับlist(string)
แต่ส่งคืนตัวกำเนิดที่ประเมินอย่างเฉื่อยชา ณ จุดใช้งานดังนั้นหน่วยความจำจึงมีประสิทธิภาพ
>>> for i in range(len(a)):
... print a[i]
...
โดยที่ a คือสตริงที่คุณต้องการแยกออก ค่า "a [i]" เป็นอักขระแต่ละตัวของสตริงซึ่งสามารถผนวกเข้ากับรายการ
for c in a: print c
อยู่ไกลขึ้น