তালিকাগুলির সাথে পাইথন স্ট্রিং ফর্ম্যাটিং ব্যবহার করা


111

আমি sপাইথন ২.6.৫ এ একটি স্ট্রিং তৈরি করেছি যার মধ্যে %sটোকেনের বিভিন্ন সংখ্যা থাকবে , যা তালিকায় প্রবেশের সংখ্যার সাথে মেলে x। আমার একটি ফর্ম্যাট স্ট্রিং লিখতে হবে। নিম্নলিখিতটি কাজ করে না, তবে আমি কী করার চেষ্টা করছি তা নির্দেশ করে। এই উদাহরণে, তিনটি %sটোকেন রয়েছে এবং তালিকায় তিনটি প্রবেশ রয়েছে।

s = '%s BLAH %s FOO %s BAR'
x = ['1', '2', '3']
print s % (x)

আমি আউটপুট স্ট্রিংটি চাই:

1 BLAH 2 FOO 3 BAR

উত্তর:


112
print s % tuple(x)

পরিবর্তে

print s % (x)

5
(x)হিসাবে একই জিনিস x। ব্র্যাকেটে একক টোকেন রাখার অর্থ পাইথনের কোনও অর্থ নেই। আপনি সাধারণত foo = (bar, )পড়া সহজ করে তুলতে ব্র্যাকেটগুলি রাখেন তবে foo = bar,ঠিক একই জিনিসটি করেন।
প্যাট্রি

11
print s % (x)ওপি যা লিখেছেন, আমি কেবল তার / তার উদ্ধৃতি দিচ্ছিলাম।
ইনফ্রারেড

আমি কেবল একটি ভাষার টিপ সরবরাহ করছিলাম, আপনার উত্তরের সমালোচনা করছিলাম না (আসলে আমি এটি +1 করেছি)। আপনিও foo = (bar, )
লিখেননি

2
আমি (x)স্বচ্ছতার জন্য স্বরলিপি ব্যবহার করি ; পরে যদি আপনি অতিরিক্ত ভেরিয়েবলগুলি যুক্ত করেন তবে এটি বন্ধনীগুলি ভুলে যাওয়া এড়িয়ে যায়।
সাব্রেভল্ফি

আপনি যদি একাধিক তালিকা থেকে আপনার ভেরিয়েবলগুলি উত্স করতে চান তবে কীভাবে? টিপল কেবলমাত্র একটি তালিকা নিয়েছে, এবং ফর্ম্যাটারটি কেবল একটি একক
টুপল

150

অজগরটির ফর্ম্যাট পদ্ধতিটি দেখে নেওয়া উচিত । তারপরে আপনি নিজের ফর্ম্যাটিং স্ট্রিংটিকে এভাবে সংজ্ঞায়িত করতে পারেন:

>>> s = '{0} BLAH BLAH {1} BLAH {2} BLAH BLIH BLEH'
>>> x = ['1', '2', '3']
>>> print s.format(*x)
'1 BLAH BLAH 2 BLAH 3 BLAH BLIH BLEH'

1
ওপির সমস্যাটি পদ্ধতি নয় পরামিতিগুলির বিন্যাস। %অপারেটর কেবল টিপলসকে আনপ্যাক করে।
12:02

এটি নির্মাণকে sআরও জটিল করে তুলবে, যেহেতু %sপ্রতিটি পদের জন্য কেবল আমার সংখ্যা বাড়ানোর পরিবর্তে আমার সংখ্যা বাড়ানো দরকার । sবিভিন্ন ধাপে অন্তর্নির্মিত, তাই %sটোকেনটি অন্তর্ভুক্ত করা আরও সহজ ।
সাব্রেভল্ফি

2
@SabreWolfy আপনি এটা precedurally তারপর গঠন করা আপনি সহজে আপনার প্লেসহোল্ডার নাম এবং তার ফলে স্ট্রিং ফরম্যাট করার জন্য একটি অভি ব্যবহার করতে পারে: print u'%(blah)d BLAHS %(foo)d FOOS …' % {'blah': 15, 'foo': 4}
প্যাট্রি করুন

2
@ সাবেরওল্ফি: পাইথন ২.7-এ, আপনি ক্ষেত্রের নম্বরগুলি বাদ দিতে পারেন:s = '{} BLAH {} BLAH BLAH {} BLAH BLAH BLAH'
পরবর্তী নির্দেশ না দেওয়া পর্যন্ত

এই উত্তরটি সম্ভাব্য বিভ্রান্তিকর, কারণ এটি 0, 1 এবং 2 এর সংখ্যাসূচক মানগুলির মতো দেখায় যে কোনওভাবে "BLAH" শব্দটি প্রদর্শিত হওয়ার সংখ্যার সাথে সম্পর্কিত।
সাবারওল্ফি

31

এই সংস্থান পৃষ্ঠাটি অনুসরণ করে, x এর দৈর্ঘ্য যদি আলাদা হয় তবে আমরা ব্যবহার করতে পারি:

', '.join(['%.2f']*len(x))

তালিকা থেকে প্রতিটি উপাদান জন্য একটি স্থান ধারক তৈরি করতে x। এখানে উদাহরণ:

x = [1/3.0, 1/6.0, 0.678]
s = ("elements in the list are ["+', '.join(['%.2f']*len(x))+"]") % tuple(x)
print s
>>> elements in the list are [0.33, 0.17, 0.68]

1
লিঙ্কটি এখন মারা গেছে।
এম কে হান্টার

19

এখানে একটি ওলাইনার। একটি তালিকা পুনরাবৃত্তি করতে মুদ্রণ () সহ ফর্ম্যাট ব্যবহার করে একটি সামান্য অসম্পূর্ণ উত্তর।

এটি সম্পর্কে কীভাবে (অজগর 3.x):

sample_list = ['cat', 'dog', 'bunny', 'pig']
print("Your list of animals are: {}, {}, {} and {}".format(*sample_list))

ফর্ম্যাট () ব্যবহার করে এখানে ডক্স পড়ুন ।


18

যেহেতু আমি এই শীতল জিনিসটি সম্পর্কে শিখেছি (ফর্ম্যাট স্ট্রিংয়ের মধ্যে থেকে তালিকাগুলিতে ইনডেক্সিং) আমি এই পুরানো প্রশ্নটিতে যুক্ত করছি।

s = '{x[0]} BLAH {x[1]} FOO {x[2]} BAR'
x = ['1', '2', '3']
print (s.format (x=x))

আউটপুট:

1 BLAH 2 FOO 3 BAR

তবে, কীভাবে স্লাইসিং করবেন (ফরম্যাট স্ট্রিংয়ের অভ্যন্তরে '"{x[2:4]}".format...) তা কীভাবে করা যায় তা আমি এখনও খুঁজে পাইনি এবং কারও ধারণা থাকলে এটি বের করতে ভাল লাগবে তবে আমি সন্দেহ করি যে আপনি কেবল এটি করতে পারবেন না।


টুকরো টুকরো করার জন্য আপনার ব্যবহারের ক্ষেত্রে আমি কিছুটা কৌতূহলী।
মাইকেল

1
আমার সত্যিই একটি নেই ... আমার মনে হয় আমি কেবল ভেবেছিলাম এটি করতে পারলে ঝরঝরে হবে
জোড়ান ব্যাসলি

11

এটি একটি মজার প্রশ্ন ছিল! পরিবর্তনশীল দৈর্ঘ্যের তালিকাগুলির জন্য এটি হ্যান্ডেল করার আরেকটি উপায় হ'ল একটি ফাংশন তৈরি করা যা .formatপদ্ধতির পুরো সুবিধা নেয় এবং আনপ্যাকিংয়ের তালিকা তৈরি করে। নিম্নলিখিত উদাহরণে আমি কোনও অভিনব বিন্যাস ব্যবহার করি না, তবে আপনার প্রয়োজন অনুসারে এটি সহজেই পরিবর্তন করা যেতে পারে।

list_1 = [1,2,3,4,5,6]
list_2 = [1,2,3,4,5,6,7,8]

# Create a function that can apply formatting to lists of any length:
def ListToFormattedString(alist):
    # Create a format spec for each item in the input `alist`.
    # E.g., each item will be right-adjusted, field width=3.
    format_list = ['{:>3}' for item in alist] 

    # Now join the format specs into a single string:
    # E.g., '{:>3}, {:>3}, {:>3}' if the input list has 3 items.
    s = ','.join(format_list)

    # Now unpack the input list `alist` into the format string. Done!
    return s.format(*alist)

# Example output:
>>>ListToFormattedString(list_1)
'  1,  2,  3,  4,  5,  6'
>>>ListToFormattedString(list_2)
'  1,  2,  3,  4,  5,  6,  7,  8'

3

@ নিওবোটের উত্তর হিসাবে একই তবে কিছুটা আধুনিক এবং সংযুক্তি।

>>> l = range(5)
>>> " & ".join(["{}"]*len(l)).format(*l)
'0 & 1 & 2 & 3 & 4'

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.