অক্ষরের অ্যারেতে একটি স্ট্রিং কীভাবে বিভক্ত করবেন?


450

আমি একটি স্ট্রিংকে অক্ষরের অ্যারে হিসাবে বিভক্ত করার উত্তরের জন্য ওয়েবে ঘুরে দেখার চেষ্টা করেছি তবে আমি একটি সহজ পদ্ধতি খুঁজে পাচ্ছি না

str.split(//)রুবির মতো কাজ করে না বলে মনে হয়। লুপ ছাড়াই এটি করার কোনও সহজ উপায় আছে?


12
পাইথনে, স্ট্রিংগুলি প্রতিস্থাপন ব্যতীত অন্য সমস্ত উদ্দেশ্যে ইতিমধ্যে অক্ষরের অ্যারে। আপনি এগুলি টুকরো টুকরো টুকরো টুকরো টুকরো করে রেফারেন্স করতে পারেন বা সূচিপত্র ইত্যাদির মাধ্যমে আইটেমগুলি সন্ধান করতে পারেন
ডানসালমো

উত্তর:


860
>>> s = "foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']

আপনার তালিকা দরকার


2
আমার মতে রুবি পদ্ধতির চেয়ে অনেক ভাল, আপনি সি লেভেলে সিকোয়েন্স প্রকারের মধ্যে নিখরচায় এমনকি আরও ভাল রূপান্তর করতে পারেন।
আর্থারপ্রস

তালিকার নির্মাতা একটি মার্জিত বৈশিষ্ট্য যা স্ট্রিংকে স্বয়ংক্রিয়ভাবে অক্ষরের অ্যারেতে রূপান্তর করে। যেহেতু, স্ট্রিং ইউনিকোড চরিত্রগুলির একজাতীয় অনুক্রম যা পাইথনের সাথে কাজ করা এতটাই দুর্দান্ত এবং স্রষ্টা গুইদো এটি আরও ভাল করে তুলেছে। অসাধারণ দক্ষতার জন্য অজগর ভালবাসা।
ডাগল

আমি এখানে পতাকাটি এটি না করার জন্য চাই ... তবে যাই হোক যদি আপনি কল করতে চান তবে আপনি এই আচরণ থেকে বাঁচতে পারবেনcast_method = lambda x: [x]
madzohan


60

আপনি তালিকা () ছাড়াই খুব সাধারণ উপায়ে এটি করতে পারেন:

>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']

4
স্ট্যাকওভারফ্লোতে স্বাগতম। কীভাবে সমস্যাটি সমাধান হয় তা বোঝাতে আপনি কি উত্তরটি কিছুটা বাড়িয়ে দিতে আপত্তি করবেন?
এনজেআইমনদার

21
এটি নিছক for, ব্যাখ্যা করার মতো অনেক কিছুই নেই। আমি মনে করি আপনার ডেটা স্ট্রাকচারের অজগর টিউটোরিয়ালটি পড়া উচিত , বিশেষত বোধগম্যতার তালিকা।
নটহাগো

4
এর অর্থ কেবল list(map(lambda c: c, iter("foobar"))), তবে আরও পঠনযোগ্য এবং অর্থবহ।
no1xsyzy

41

আপনি যদি একবারে আপনার স্ট্রিংয়ের একটি অক্ষর প্রক্রিয়া করতে চান তবে। আপনার কাছে বিভিন্ন বিকল্প রয়েছে।

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

এই পদ্ধতির প্রতিটি কর্মক্ষমতা বৈশিষ্ট্য মধ্যে পার্থক্য আছে?
কিউক্সজিলবার

20

আমি এই কাজটি সম্পাদন করার জন্য আরও দুটি উপায় অন্বেষণ করেছি। এটি কারও পক্ষে সহায়ক হতে পারে।

প্রথমটি সহজ:

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', '', '']

আরও পদ্ধতির জন্য পাইথন ডক্স দেখুন


প্রথম উপায় খুব সহজ। লোকেরা আরও জটিল কিছু চায় এমন কি কারণ রয়েছে?
আন্ডারলাইন করুন

হ্যালো! প্রথম বিকল্পটি সত্যই সহজ। যদিও দ্বিতীয়টি আরও জটিল প্রক্রিয়াজাতকরণের জন্য আরও ভাল সম্ভাবনা রাখে।
আলেক্সি মিলোগ্রাডভ

19

টাস্কটি স্ট্রিংয়ের অক্ষরগুলির পুনরাবৃত্তি করতে এবং সেগুলিকে একটি তালিকায় সংগ্রহ করার জন্য ফোটায়। সর্বাধিক নির্বোধ সমাধান দেখতে হবে

result = []
for character in string:
    result.append(character)

অবশ্যই, এটি সংক্ষিপ্ত করা যেতে পারে

result = [character for character in string]

তবে এখনও ছোট কাজগুলি রয়েছে যা একই কাজ করে।

listকনস্ট্রাক্টর যেকোন পুনরাবৃত্ত ( রূপান্তরকারী , তালিকা, টিপলস, স্ট্রিং ইত্যাদি) কে তালিকায় রূপান্তর করতে ব্যবহার করা যেতে পারে ।

>>> list('abc')
['a', 'b', 'c']

বড় প্লাসটি হ'ল এটি পাইথন 2 এবং পাইথন 3 উভয় ক্ষেত্রে একই কাজ করে।

এছাড়াও, পাইথন 3.5 থেকে শুরু করে (দুর্দান্ত পিইপি 448 এর জন্য ধন্যবাদ ) খালি তালিকার খালি তালিকায় আনপ্যাক করে যেকোন পুনরাবৃত্ত থেকে একটি তালিকা তৈরি করা এখন সম্ভব:

>>> [*'abc']
['a', 'b', 'c']

এটি আরও সুন্দর, এবং কিছু ক্ষেত্রে listসরাসরি কনস্ট্রাক্টরকে কল করার চেয়ে আরও দক্ষ ।

আমি mapবেসড পদ্ধতির ব্যবহারের বিরুদ্ধে পরামর্শ দেব , কারণ পাইথন ৩-এ কোনও তালিকা ফিরে mapআসে না See দেখুন কীভাবে ফিল্টার, মানচিত্র ব্যবহার করতে হয় এবং পাইথন 3-তে কীভাবে হ্রাস করতে হয়


আমার মনে হয় শেষ প্রস্তাবটি খুব সুন্দর। তবে আমি দেখতে পাচ্ছি না আপনি কেন অন্য কয়েকটি পদ্ধতির পুনর্বিবেচনা করেছেন, (বেশিরভাগ) এখানে ইতিমধ্যে পোস্ট করা হয়েছে এবং আশ্চর্যজনক অজগর 3.5 এর সমাধান থেকে বিভ্রান্ত করেছেন !
এমসিফার্ট

14

আমার আপনার কেবল অক্ষরের একটি অ্যারে দরকার:

arr = list(str)

আপনি যদি একটি নির্দিষ্ট স্ট্রের দ্বারা স্ট্র্টটি বিভক্ত করতে চান:

# str = "temp//temps" will will be ['temp', 'temps']
arr = str.split("//")

12

split()ইনবিল্ট ফাংশন কেবলমাত্র কিছু শর্তের ভিত্তিতে মানকে পৃথক করে তবে একক কথায় এটি শর্তটি পূরণ করতে পারে না। সুতরাং, এর সাহায্যে এটি সমাধান করা যেতে পারে list()। এটি অভ্যন্তরীণভাবে অ্যারে কল করে এবং এটি অ্যারের ভিত্তিতে মানটি সংরক্ষণ করবে।

ধরা যাক,

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']


3

আপনি যদি কেবল স্ট্রিংটিতে অ্যাক্সেস পড়তে চান তবে আপনি সরাসরি অ্যারে স্বরলিপি ব্যবহার করতে পারেন।

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

1

ঠিক আছে, আমি তালিকার (সংস্করণ) সংস্করণটি যতটা পছন্দ করি, এখানে আরও একটি ভার্বোজ উপায় খুঁজে পেয়েছি (তবে এটি দুর্দান্ত তাই আমি ভেবেছিলাম যে আমি এটিকে লড়াইয়ে যুক্ত করব):

>>> 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))])
সেখানে

1
from itertools import chain

string = 'your string'
chain(string)

অনুরূপ list(string)তবে এমন একটি জেনারেটর প্রদান করে যা ব্যবহারের স্থানে অলসভাবে মূল্যায়ন করা হয়, সুতরাং মেমরির দক্ষ।


স্ট্রিংয়ের চেয়ে এটি কোথায় বেশি কার্যকর হবে তা নিশ্চিত নয়, যা পুনরাবৃত্তিযোগ্য।
Ry-

0
>>> for i in range(len(a)):
...     print a[i]
... 

এমন একটি স্ট্রিং যা আপনি আলাদা করতে চান। "A [i]" মানগুলি স্ট্রিংয়ের স্বতন্ত্র চরিত্র যা এগুলিকে একটি তালিকায় যুক্ত করা যেতে পারে।


1
for c in a: print cঅনেক বেশি সরাসরি
জেমস ওয়াল্ডবি - jwpat7
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.