পাইথনে স্ট্রিংয়ের তালিকায় যোগ দিন এবং প্রতিটি স্ট্রিং উদ্ধৃতি চিহ্নগুলিতে মোড়ক করুন


109

আমি পেয়েছি:

words = ['hello', 'world', 'you', 'look', 'nice']

আমি পেতে চাই:

'"hello", "world", "you", "look", "nice"'

পাইথন দিয়ে এটি করার সহজতম উপায় কী?

উত্তর:


186
>>> words = ['hello', 'world', 'you', 'look', 'nice']
>>> ', '.join('"{0}"'.format(w) for w in words)
'"hello", "world", "you", "look", "nice"'

4
@ মাউও reprযা এই নির্দিষ্ট ক্ষেত্রে লিল হ্যাকি ব্যবহার করে তা উদ্ধৃতিগুলির সাথে পরিষ্কার হওয়ার বিপরীতে
জামিলাক

4
@ জামালাক ঠিক আছে, আপনার স্ট্রিংয়ে কোট রয়েছে তবে repr আমার কাছে নিরাপদ বলে মনে হয়েছে।
মেও

51

আপনি একটি একক formatকল করতে পারেন

>>> words = ['hello', 'world', 'you', 'look', 'nice']
>>> '"{0}"'.format('", "'.join(words))
'"hello", "world", "you", "look", "nice"'

আপডেট: কিছু বেঞ্চমার্কিং (একটি 2009 এমবিপিতে সঞ্চালিত):

>>> timeit.Timer("""words = ['hello', 'world', 'you', 'look', 'nice'] * 100; ', '.join('"{0}"'.format(w) for w in words)""").timeit(1000)
0.32559704780578613

>>> timeit.Timer("""words = ['hello', 'world', 'you', 'look', 'nice'] * 100; '"{}"'.format('", "'.join(words))""").timeit(1000)
0.018904924392700195

সুতরাং মনে হচ্ছে formatএটি আসলে বেশ ব্যয়বহুল

আপডেট 2: জ্যাকোডের মন্তব্য অনুসরণ করে, কাজ করবে mapতা নিশ্চিত করতে একটি যুক্ত করে join, পাইথন ২.7.১২

>>> timeit.Timer("""words = ['hello', 'world', 'you', 'look', 'nice'] * 100; ', '.join('"{0}"'.format(w) for w in words)""").timeit(1000)
0.08646488189697266

>>> timeit.Timer("""words = ['hello', 'world', 'you', 'look', 'nice'] * 100; '"{}"'.format('", "'.join(map(str, words)))""").timeit(1000)
0.04855608940124512

>>> timeit.Timer("""words = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] * 100; ', '.join('"{0}"'.format(w) for w in words)""").timeit(1000)
0.17348504066467285

>>> timeit.Timer("""words = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] * 100; '"{}"'.format('", "'.join(map(str, words)))""").timeit(1000)
0.06372308731079102

জামিলাক প্রস্তাবিতের চেয়ে এর চেয়ে ভাল পারফরম্যান্স কি আছে?
কাদ্রিয়ান

4
এটি গৃহীত উত্তরের চেয়ে ভাল সমাধান।
sage88

4
পছন্দ করেছেন প্রিপটিমাইজেশনটি মন্দ, এখানে 0.0000001% সম্ভাবনা রয়েছে যে এখানে মিনিস্কুলের গতির পার্থক্যটি পাইথন স্ক্রিপ্টের সম্পূর্ণ বাধা। এছাড়াও এই কোডটি অনেক কম স্বজ্ঞাত তাই এটি আরও ভাল নয় , এটি খুব সামান্য দ্রুত । আমার সমাধানটি আরও
অজগর

@ মার্চেলব্লিং বেঞ্চমার্কটি অবৈধ কারণ জামিলাক 'দ্রবণটি স্ট্রিং-অ-স্ট্রিংয়ের ক্ষেত্রেও কাজ করে। প্রতিস্থাপন .join(words)সঙ্গে .join(map(str, words))এবং আমাদের দেখায় যে কিভাবে চলে যায়।
WloHu

@ জে কোড বেঞ্চমার্ক আপডেট করেছে। ফাঁকটি আরও কম তবে এখনও আমার মেশিনে 2x লাভ রয়েছে।
মার্চেল্বলিং

42

আপনি এটি চেষ্টা করতে পারেন:

str(words)[1:-1]

4
এটি কীভাবে উদ্ধৃতি যোগ করবে?
দেজেল

6
এটি দ্বিগুণের পরিবর্তে একক উদ্ধৃতি চিহ্ন যুক্ত করে তবে শব্দের ভিতরে থাকা উদ্ধৃতিগুলি স্বয়ংক্রিয়ভাবে পালিয়ে যাবে। চতুরতার জন্য +1।
ফলিক্স কারন

এটি সেই চতুরতম ট্রিডবিটগুলির মধ্যে একটি যা পাইথনকে এত ফলপ্রসূ করে তোলে।
ম্যাক্স ভন হিপ্পেল

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


4

এফ স্ট্রিংস (পাইথন ৩.6++) এর সাথে @ জামিলাক জবাবের একটি আপডেট সংস্করণ, আমি এসকিউএল স্ক্রিপ্টের জন্য ব্যবহৃত স্ট্রিংয়ের জন্য ব্যাকটিক্স ব্যবহার করেছি।

keys = ['foo', 'bar' , 'omg']
', '.join(f'`{k}`' for k in keys)
# result: '`foo`, `bar`, `omg`'

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