আপনি স্ট্রিংয়ের তালিকা থেকে কমা-বিচ্ছিন্ন স্ট্রিংটি কীভাবে তৈরি করবেন?


526

ক্রম থেকে স্ট্রিংগুলি সংযুক্ত করার জন্য আপনার পছন্দের উপায়টি কী হতে পারে যাতে প্রতিটি পর পর দু'জনের মধ্যে একটি কমা যুক্ত হয়। এটি, উদাহরণস্বরূপ, আপনি কীভাবে মানচিত্র ['a', 'b', 'c']করবেন 'a,b,c'? (ক্ষেত্রে ['s']এবং []ম্যাপ দিতে হবে 's'এবং ''যথাক্রমে।)

আমি সাধারণত কিছু ব্যবহার করে শেষ করি ''.join(map(lambda x: x+',',l))[:-1]তবে কিছুটা অসন্তুষ্টও বোধ করি।

উত্তর:


967
my_list = ['a', 'b', 'c', 'd']
my_string = ','.join(my_list)
'a,b,c,d'

তালিকায় পূর্ণসংখ্যা থাকলে এটি কাজ করবে না


এবং যদি তালিকায় নন-স্ট্রিং প্রকারগুলি থাকে (যেমন পূর্ণসংখ্যা, ভাসমান, বুলস, কিছুই নয়) তবে তা করুন:

my_string = ','.join(map(str, my_list)) 

দ্রষ্টব্য আপনি যদি পাইথন ২.7 ব্যবহার করছেন (যা এখনই আপনার উচিত হবে না) তবে তালিকার কোনও আইটেমের ইউনিকোড থাকলে স্ট্রিং ব্যবহার ব্যতিক্রম করবে।
ক্রোজ

75

কেন map/ lambdaযাদু? এই কাজ করে না?

>>> foo = ['a', 'b', 'c']
>>> print(','.join(foo))
a,b,c
>>> print(','.join([]))

>>> print(','.join(['a']))
a

তালিকায় নম্বর থাকলে ক্ষেত্রে আপনি তালিকা উপলব্ধি ব্যবহার করতে পারেন:

>>> ','.join([str(x) for x in foo])

বা একটি জেনারেটর এক্সপ্রেশন:

>>> ','.join(str(x) for x in foo)

18

",".join(l)সব ক্ষেত্রে কাজ করবে না। আমি স্ট্রিংআইও দিয়ে সিএসভি মডিউলটি ব্যবহার করার পরামর্শ দেব

import StringIO
import csv

l = ['list','of','["""crazy"quotes"and\'',123,'other things']

line = StringIO.StringIO()
writer = csv.writer(line)
writer.writerow(l)
csvcontent = line.getvalue()
# 'list,of,"[""""""crazy""quotes""and\'",123,other things\r\n'

সেখানে নেই StringIOপাইথন 3
রন Kalian থেকে

4
@ রোনকালিয়ান from io import StringIOপাইথন 3 এ ব্যবহার করুন
কেভিন অ্যাসক্র্যাফট

13

পাইথন 3.0.০ এ বিকল্প সমাধান রয়েছে যা নন-স্ট্রিং তালিকা আইটেমগুলিকে অনুমতি দেয়:

>>> alist = ['a', 1, (2, 'b')]
  • একটি স্ট্যান্ডার্ড উপায়

    >>> ", ".join(map(str, alist))
    "a, 1, (2, 'b')"
    
  • বিকল্প সমাধান

    >>> import io
    >>> s = io.StringIO()
    >>> print(*alist, file=s, sep=', ', end='')
    >>> s.getvalue()
    "a, 1, (2, 'b')"
    

দ্রষ্টব্য: কমা দেওয়ার পরে স্থানটি ইচ্ছাকৃত।


11

আপনি কি চান না:

",".join(l)

স্পষ্টতই যদি আপনার মূল্যবোধগুলিতে মূল্য / উদ্ধার কমা ইত্যাদির দরকার হয় তবে এটি আরও জটিল হয়ে উঠবে। সেক্ষেত্রে আমি স্ট্যান্ডার্ড লাইব্রেরিতে সিএসভি মডিউলটি দেখার পরামর্শ দিচ্ছি:

https://docs.python.org/library/csv.html


10

@ পিটার হফম্যান

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

>>> l = [1, "foo", 4 ,"bar"]
>>> ",".join(str(bit) for bit in l)
'1,foo,4,bar' 

7
>>> my_list = ['A', '', '', 'D', 'E',]
>>> ",".join([str(i) for i in my_list if i])
'A,D,E'

my_listকোনও ধরণের ভেরিয়েবল থাকতে পারে। এটি ফলাফল এড়ানো 'A,,,D,E'


4
l=['a', 1, 'b', 2]

print str(l)[1:-1]

Output: "'a', 1, 'b', 2"

1
আমি মনে করি আপনার এই পৃষ্ঠার অন্যান্য সমাধানগুলির বিপরীতে আপনার উল্লেখ করা উচিত, আপনি স্ট্রিংও উদ্ধৃত করুন।
mrdevlar

3

@ jmanning2k একটি তালিকা উপলব্ধি ব্যবহার করে একটি নতুন অস্থায়ী তালিকা তৈরির প্রতিক্রিয়া রয়েছে side আরও ভাল সমাধানটি itertools.imap ব্যবহার করা হবে যা কোনও পুনরাবৃত্তিকে রিটার্ন দেয়

from itertools import imap
l = [1, "foo", 4 ,"bar"]
",".join(imap(str, l))

এই সমাধানটি খালি স্ট্রিংয়ের জন্য অতিরিক্ত কমা যোগ না করা এবং ননটাইপ সহ একটি 'নয়' যুক্ত করার প্রয়োজনীয়তা পূরণ করে না।
রবার্তো

জেনারেটরের তুলনায় তুলনায় str.joinদ্রুত কাজের চেক করুনlist
গ্রেজেশ চৌহান

3

এখানে তালিকা সহ একটি উদাহরণ

>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [i[0] for i in myList])) 
>>> print "Output:", myList
Output: Apple,Orange

আরও সঠিক:-

>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join(map(str, [type(i) == list and i[0] for i in myList])) 
>>> print "Output:", myList
Output: Apple,Orange

উদাহরণ 2: -

myList = ['Apple','Orange']
myList = ','.join(map(str, myList)) 
print "Output:", myList
Output: Apple,Orange

1
এই প্রশ্নটি তালিকাগুলির বিষয়ে ছিল, তালিকাগুলির তালিকা নয়
ইয়েরো অ্যালটনেন

@ ইরোআল্টেনেন আমি আমার উত্তর আপডেট করেছি, আমাকে ডানদিকে দেখানোর জন্য ধন্যবাদ।

1

আমি বলব csvলাইব্রেরি এখানে একমাত্র বুদ্ধিমান বিকল্প, কারণ এটি সমস্ত সিএসভি ব্যবহারের ক্ষেত্রে যেমন একটি স্ট্রিংয়ে কমা ইত্যাদির সাথে লড়াই করার জন্য নির্মিত হয়েছিল as

l.Csv ফাইলে একটি তালিকা আউটপুট করতে :

import csv
with open('some.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(l)  # this will output l as a single row.  

writer.writerows(iterable)সিএসভিতে একাধিক সারি আউটপুট ব্যবহার করাও সম্ভব ।

এই উদাহরণটি পাইথন 3 এর সাথে সামঞ্জস্যপূর্ণ, কারণ এখানে অন্যান্য উত্তর ব্যবহৃত StringIOযা পাইথন 2।


কিন্তু অন্যান্য উত্তরের তুলনায় এটি কি খুব বেশি / জটিল নয়?
শ্রীনিকেেতন I

0

আমি যদি কিছু মিস করছি না, ','.join(foo)আপনি যা চাইছেন তা করা উচিত।

>>> ','.join([''])
''
>>> ','.join(['s'])
's'
>>> ','.join(['a','b','c'])
'a,b,c'

(সম্পাদনা করুন: এবং jmanning2k হিসাবে দেখায় যে,

','.join([str(x) for x in foo])

নিরাপদ এবং বেশ পাইথোনিক, যদিও ফলস্বরূপ স্ট্রিংগুলি পার্স করা কঠিন হবে যদি উপাদানগুলিতে কমা থাকতে পারে - তখন csvডগলাস তার উত্তরে উল্লেখ করার সাথে সাথে আপনার মডিউলের পুরো শক্তি প্রয়োজন ))


-2

আমার দুই সেন্ট. পাইথনে আমি সহজ একটি লাইন কোড পছন্দ করি:

>>> from itertools import imap, ifilter
>>> l = ['a', '', 'b', 1, None]
>>> ','.join(imap(str, ifilter(lambda x: x, l)))
a,b,1
>>> m = ['a', '', None]
>>> ','.join(imap(str, ifilter(lambda x: x, m)))
'a'

এটি অজগর, স্ট্রিং, সংখ্যা, কিছুই নয় এবং খালি স্ট্রিংয়ের জন্য কাজ করে। এটি সংক্ষিপ্ত এবং প্রয়োজনীয়তা পূরণ করে। যদি তালিকায় নম্বর থাকে না, আমরা এই সহজ প্রকরণটি ব্যবহার করতে পারি:

>>> ','.join(ifilter(lambda x: x, l))

এছাড়াও এই সমাধানটি কোনও নতুন তালিকা তৈরি করে না, তবে @ পিটার হফম্যান পয়েন্ট (ধন্যবাদ) এর মতো একটি পুনরুক্তি ব্যবহার করে।


এটি অতি ضرورتবহ। গৃহীত উত্তরটি সহজ, প্রত্যক্ষ এবং স্পষ্টভাবে সর্বোত্তম সমাধান। অতিরিক্ত জটিল বিকল্প সরবরাহ করা অর্থহীন সময় নষ্ট করা। ইতিমধ্যে যদি ইতিবাচক উত্তর পাওয়া যায় তবে আপনি যদি ভাষাটির অন্যান্য বৈশিষ্ট্যগুলি সম্পর্কে কেবল শিক্ষিত করার চেষ্টা করছেন, আপনি একই জিনিস করছেন যা আপনি আমাকে হ্রাস করেছিলেন।
পরিষ্কার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.