স্ট্রিং তালিকার উপাদানগুলি থেকে ট্রেলিং করা নিউলাইন সরান


122

আমাকে ফর্মের শব্দের একটি বৃহত তালিকা নিতে হবে:

['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']

এবং তারপরে ফালা ফাংশনটি ব্যবহার করে এটিকে পরিণত করুন:

['this', 'is', 'a', 'list', 'of', 'words']

আমি ভেবেছিলাম যে আমি যা লিখেছি তা কার্যকর হবে তবে আমি এই বলে ত্রুটি পেয়ে যাচ্ছি:

"'তালিকা' অবজেক্টের 'স্ট্রিপ' এর কোনও বৈশিষ্ট্য নেই

এখানে কোডটি চেষ্টা করেছি:

strip_list = []
for lengths in range(1,20):
    strip_list.append(0) #longest word in the text file is 20 characters long
for a in lines:
    strip_list.append(lines[a].strip())

1
আপনি কেন 0 থেকে strip_list19 বার যোগ করছেন তারপরে আপনার স্ট্রিপড লাইনগুলিকে সংযোজন করছেন দয়া করে তা ব্যাখ্যা করুন explain এই কোডটি সম্পর্কে এটি খুব খারাপ গন্ধ আছে। এছাড়াও যদি কোনও ফাইল থেকে আপনি সেই জিনিসটি পেয়ে থাকেন তবে আপনার এটি এড়াতে হবে - একটি বৃহত তালিকা তৈরি করতে হবে তবে অন্য বড় তালিকায় এটি চাপিয়ে দেওয়া ভাল ধারণা নয়। এছাড়াও 2, আপনার কোডটি দীর্ঘতম শব্দ / রেখার দৈর্ঘ্য জানার উপর নির্ভর করে না। কিছুটা পিছিয়ে যান - আপনি কী অর্জন করার চেষ্টা করছেন? আপনি কি করবেন strip_list?
জন মাচিন 21

উত্তর:


211
>>> my_list = ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']
>>> map(str.strip, my_list)
['this', 'is', 'a', 'list', 'of', 'words']

আমি কি তাহলে কেবল স্ট্রিপডলিস্ট = মানচিত্র (str.strip, my_list) বলতে পারি এবং তারপরে এই নতুন তালিকাটি মুদ্রণের জন্য স্ট্রিপড_লিস্ট মুদ্রণ করতে পারি?
জর্জ বুরোজ

19
আপনি যদি পাইথন 2 ব্যবহার করছেন তবে তবে মনে রাখবেন যে str.stripকেবলমাত্র সেই তালিকায় কাজ করে যদি আপনি নিশ্চিত হন যে তালিকায় ইউনিকোড স্ট্রিং নেই। যদি এটিতে 8-বিট এবং ইউনিকোড স্ট্রিং উভয়ই থাকতে পারে তবে lambda s: s.strip()উপরে উল্লিখিত হিসাবে ব্যবহার করুন বা stripআপনি stringsমডিউলটি থেকে আমদানি করতে পারেন এমন ফাংশনটি ব্যবহার করুন ।
সিটো

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


39
নিম্নলিখিত সম্পর্কে সচেতন হন: আপনি যদি পাইথন ৩.x ব্যবহার করে থাকেন এবং আপনি একটি তালিকা ফিরে আসতে চান তবে আপনাকে তা করতে listহবে list(map(str.strip, my_list))। এটিও পরীক্ষা করে দেখুন: লিংক
সুতরাং 21


64

আপনি তালিকা বোধগম্য ব্যবহার করতে পারেন :

strip_list = [item.strip() for item in lines]

বা mapফাংশন:

# with a lambda
strip_list = map(lambda it: it.strip(), lines)

# without a lambda
strip_list = map(str.strip, lines)

3
দ্বিতীয় সংস্করণে ল্যাম্বদা ওভারকিল।
gddc

1
0তালিকার শুরুতে মানগুলির সাথে যা কিছু হয় তা করতে আপনি একই পন্থাটি ব্যবহার করতে পারেন । যদিও আপনি তাদের একই ফলাফল তালিকায় রাখার মাধ্যমে আপনি কী অর্জন করার চেষ্টা করছেন তা আমি সত্যিই কল্পনা করতে পারি না ...
কার্ল নচেটল

4
পাইথন 3-তে তৃতীয় ফর্মটি "ল্যাম্বডা ছাড়াই" হওয়া উচিত strip_list = list(map(str.strip, lines))যেমন মানচিত্র () একটি মানচিত্র পুনরুক্তি ফেরত দেয়। docs.python.org/3/library/funitions.html#map
ডিভি

7

এটি পিইপি 202 হিসাবে সংজ্ঞায়িত হিসাবে তালিকা বোধগম্য ব্যবহার করে করা যেতে পারে

[w.strip() for w in  ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']]

আমি থেকে নাম পরিবর্তন চিন্তা ছিল listথেকে map:)
ক্যাসি

3

অন্যান্য সমস্ত উত্তর, এবং প্রধানত তালিকা বোঝার সম্পর্কে, দুর্দান্ত। তবে কেবল আপনার ত্রুটিটি ব্যাখ্যা করতে:

strip_list = []
for lengths in range(1,20):
    strip_list.append(0) #longest word in the text file is 20 characters long
for a in lines:
    strip_list.append(lines[a].strip())

aআপনার তালিকার একজন সদস্য, কোনও সূচক নয়। আপনি যা লিখতে পারেন তা হ'ল:

[...]
for a in lines:
    strip_list.append(a.strip())

আরেকটি গুরুত্বপূর্ণ মন্তব্য: আপনি এইভাবে একটি খালি তালিকা তৈরি করতে পারেন:

strip_list = [0] * 20

কিন্তু এই তাই উপযোগী করে নয়, .append আপনার স্বাক্ষরে আপনার তালিকাতে স্টাফ। আপনার ক্ষেত্রে, খেলাপিযুক্ত স্ট্রিংগুলি যুক্ত করার সময় আপনি প্রতি আইটেমটি এটি তৈরি করতে হওয়ায় এটি ডিফল্ট মান সহ একটি তালিকা তৈরি করা কার্যকর নয়।

সুতরাং আপনার কোডটি এমন হওয়া উচিত:

strip_list = []
for a in lines:
    strip_list.append(a.strip())

তবে, নিশ্চিতভাবেই, সেরাটি হ'ল এটি হ'ল, কারণ এটি ঠিক একই জিনিস:

stripped = [line.strip() for line in lines]

আপনার যদি কেবলমাত্র একটির চেয়ে আরও জটিল কিছু থাকে তবে এটি .stripএকটি ফাংশনে রাখুন এবং এটি করুন। এটি তালিকা সহ কাজ করার সবচেয়ে পঠনযোগ্য উপায়।


2

আপনার যদি কেবল পেছনের শ্বেত স্থানটি অপসারণ করতে হয় তবে আপনি ব্যবহার করতে পারেন str.rstrip()যা এর চেয়ে কিছুটা দক্ষ হওয়া উচিত str.strip():

>>> lst = ['this\n', 'is\n', 'a\n', 'list\n', 'of\n', 'words\n']
>>> [x.rstrip() for x in lst]
['this', 'is', 'a', 'list', 'of', 'words']
>>> list(map(str.rstrip, lst))
['this', 'is', 'a', 'list', 'of', 'words']

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