তালিকায় স্ট্রিংয়ের মানগুলি সন্ধান করুন এবং প্রতিস্থাপন করুন


153

আমি এই তালিকা পেয়েছি:

words = ['how', 'much', 'is[br]', 'the', 'fish[br]', 'no', 'really']

আমি যা চাই তা হ'ল [br]কিছু দুর্দান্ত মানের সাথে প্রতিস্থাপন করা <br />এবং এর ফলে একটি নতুন তালিকা পাওয়া:

words = ['how', 'much', 'is<br />', 'the', 'fish<br />', 'no', 'really']

উত্তর:


274
words = [w.replace('[br]', '<br />') for w in words]

এগুলিকে তালিকা সংবিধান বলা হয় ।


5
এই তালিকাটি বোঝার পদ্ধতি এবং মানচিত্রের পদ্ধতির (@ অ্যান্টনি কং পোস্ট করেছেন) মধ্যে একটি তুলনা সম্পাদন করে, এই তালিকা পদ্ধতিটি প্রায় 2x দ্রুত ছিল। এছাড়াও এটি একই কলটিতে একাধিক প্রতিস্থাপন সন্নিবেশ করার অনুমতি দেয়, যেমনresname = [name.replace('DA', 'ADE').replace('DC', 'CYT').replace('DG', 'GUA').replace('DT', 'THY') for name in ncp.resname()]
স্টিভেন সি হাওল

1
@ সিবেরি আমার একটি তালিকা রয়েছে ['word STRING', 'word_count BIGINT', 'corpus STRING', 'corpus_date BIGINT']যেখানে আমি 'খালি দিয়ে প্রতিস্থাপনের চেষ্টা করছি তবে এটি কাজ করছে না। এটি ব্যবহার করে আমরা কীভাবে এটি প্রতিস্থাপন করতে পারি?
সন্দীপ সিং

আইটেমগুলির মধ্যে একটি ভাসা / পূর্ণসংখ্যা হয় কি?
দেশপ্রেমিক

32

আপনি উদাহরণস্বরূপ ব্যবহার করতে পারেন:

words = [word.replace('[br]','<br />') for word in words]

2
@ macetw আসলে প্রথম উত্তর।
কোডআইটি

টাইমস্ট্যাম্পটি দেখে মনে হচ্ছে তারা উভয়ই একই সাথে উত্তর দিয়েছে, সম্ভবত এইটি কয়েক সেকেন্ডের কিছুটা সময়
পেরিয়ে

31

তালিকা বোঝার পাশাপাশি, আপনি মানচিত্র চেষ্টা করতে পারেন

>>> map(lambda x: str.replace(x, "[br]", "<br/>"), words)
['how', 'much', 'is<br/>', 'the', 'fish<br/>', 'no', 'really']

15

আপনি যদি বিভিন্ন পদ্ধতির কর্মক্ষমতা সম্পর্কে ভাবছেন তবে এখানে কিছু সময় দেওয়া হল:

In [1]: words = [str(i) for i in range(10000)]

In [2]: %timeit replaced = [w.replace('1', '<1>') for w in words]
100 loops, best of 3: 2.98 ms per loop

In [3]: %timeit replaced = map(lambda x: str.replace(x, '1', '<1>'), words)
100 loops, best of 3: 5.09 ms per loop

In [4]: %timeit replaced = map(lambda x: x.replace('1', '<1>'), words)
100 loops, best of 3: 4.39 ms per loop

In [5]: import re

In [6]: r = re.compile('1')

In [7]: %timeit replaced = [r.sub('<1>', w) for w in words]
100 loops, best of 3: 6.15 ms per loop

আপনি যেমন সাধারণ প্যাটার্নগুলির জন্য দেখতে পান স্বীকৃত তালিকার বোঝাপড়াটি দ্রুততম, তবে নিম্নলিখিতটি দেখুন:

In [8]: %timeit replaced = [w.replace('1', '<1>').replace('324', '<324>').replace('567', '<567>') for w in words]
100 loops, best of 3: 8.25 ms per loop

In [9]: r = re.compile('(1|324|567)')

In [10]: %timeit replaced = [r.sub('<\1>', w) for w in words]
100 loops, best of 3: 7.87 ms per loop

এটি দেখায় যে আরও জটিল বিকল্পগুলির জন্য প্রাক-সংকলিত রেজ-এক্সপ্রেস (যেমনটি 9-10) দ্রুত হতে পারে much এটি আপনার সমস্যা এবং রেগ-এক্সপের সবচেয়ে সংক্ষিপ্ত অংশের উপর নির্ভর করে।


3

লুপের সাথে একটি উদাহরণ (আমি তালিকা সংবিধান পছন্দ করি)।

a, b = '[br]', '<br />'
for i, v in enumerate(words):
    if a in v:
        words[i] = v.replace(a, b)
print(words)
# ['how', 'much', 'is<br/>', 'the', 'fish<br/>', 'no', 'really']
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.