আমার কাছে পাইথন তালিকার পরিবর্তনশীল রয়েছে যাতে স্ট্রিং রয়েছে। অজগর ফাংশন আছে যা একটি পাসের সমস্ত স্ট্রিংকে ছোট হাতের মধ্যে এবং তার বিপরীতে, বড় হাতের মধ্যে রূপান্তর করতে পারে?
আমার কাছে পাইথন তালিকার পরিবর্তনশীল রয়েছে যাতে স্ট্রিং রয়েছে। অজগর ফাংশন আছে যা একটি পাসের সমস্ত স্ট্রিংকে ছোট হাতের মধ্যে এবং তার বিপরীতে, বড় হাতের মধ্যে রূপান্তর করতে পারে?
উত্তর:
এটি তালিকা বোঝার সাথে করা যেতে পারে। এগুলি মূলত রূপ নেয় [function-of-item for item in some-list]
। উদাহরণস্বরূপ, একটি নতুন তালিকা তৈরি করতে যেখানে সমস্ত আইটেম লোয়ার-কেসড হয় (বা দ্বিতীয় স্নিপেটে আপার-কেসড), আপনি ব্যবহার করতে পারেন:
>>> [x.lower() for x in ["A","B","C"]]
['a', 'b', 'c']
>>> [x.upper() for x in ["a","b","c"]]
['A', 'B', 'C']
আপনি map
ফাংশনটি ব্যবহার করতে পারেন :
>>> map(lambda x:x.lower(),["A","B","C"])
['a', 'b', 'c']
>>> map(lambda x:x.upper(),["a","b","c"])
['A', 'B', 'C']
list(map(lambda x:x.upper(),["a","b","c"]))
map(str.lower, ["A","B","C"])
(অনেক লোকের জন্য) পড়া সহজ হওয়া ছাড়াও তালিকাগুলিও গতি দৌড়ে জিততে পারে:
$ python2.6 -m timeit '[x.lower() for x in ["A","B","C"]]'
1000000 loops, best of 3: 1.03 usec per loop
$ python2.6 -m timeit '[x.upper() for x in ["a","b","c"]]'
1000000 loops, best of 3: 1.04 usec per loop
$ python2.6 -m timeit 'map(str.lower,["A","B","C"])'
1000000 loops, best of 3: 1.44 usec per loop
$ python2.6 -m timeit 'map(str.upper,["a","b","c"])'
1000000 loops, best of 3: 1.44 usec per loop
$ python2.6 -m timeit 'map(lambda x:x.lower(),["A","B","C"])'
1000000 loops, best of 3: 1.87 usec per loop
$ python2.6 -m timeit 'map(lambda x:x.upper(),["a","b","c"])'
1000000 loops, best of 3: 1.87 usec per loop
map
রেসটি জিতেছে, তবে কিছুই করেনি :)
map(str.lower,["A","B","C"])
দ্রুততম python3.7.5 হয়
তালিকা অনুধাবন হ'ল আমি এটি কীভাবে করব, এটি "পাইথোনিক" উপায়। নিম্নলিখিত ট্রান্সক্রিপ্টটি দেখায় কীভাবে একটি তালিকা সমস্ত আপার কেস থেকে তারপর নিম্নে ফিরে যায়:
pax@paxbox7:~$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> x = ["one", "two", "three"] ; x
['one', 'two', 'three']
>>> x = [element.upper() for element in x] ; x
['ONE', 'TWO', 'THREE']
>>> x = [element.lower() for element in x] ; x
['one', 'two', 'three']
list
ভেরিয়েবলের নাম হিসাবে ব্যবহার করা সবচেয়ে ভাল পছন্দ নয় :)
list
:)) আপনি সম্প্রতি যে ইউভি পেয়েছেন তা কোথা থেকে এসেছে বলে আপনি মনে করেন? :)
এই নমুনার জন্য বোধগতি দ্রুততম
$ পাইথন-মি টাইমিট-এস 's = ["এক", "দুই", "তিন"] * 1000' '[এক্স-এক্স এর জন্য এক্স] 1000 লুপগুলি, প্রতি লুপে 3: 809 ইউএসসি সেরা $ পাইথন-মি টাইমিটিট-এস 's = ["এক", "দুই", "তিন"] * 1000' 'মানচিত্র (স্ট্রিয়াল আপার, গুলি)' 1000 লুপগুলি, প্রতি লুপে 3: 1.12 মেসি থেকে সেরা $ পাইথন-মি টাইমিট-এস 's = ["এক", "দুই", "তিন"] * 1000' 'মানচিত্র (ল্যাম্বদা এক্স: এক্স.অপার (), গুলি)' 1000 লুপগুলি, প্রতি লুপে 3: 1.77 ম্যাক্সের মধ্যে সেরা
একজন শিক্ষার্থী জিজ্ঞাসা করছে, একই সমস্যার উত্তর দেওয়া অন্য শিক্ষার্থী :))
fruits=['orange', 'grape', 'kiwi', 'apple', 'mango', 'fig', 'lemon']
newList = []
for fruit in fruits:
newList.append(fruit.upper())
print(newList)
সমাধান:
>>> s = []
>>> p = ['This', 'That', 'There', 'is', 'apple']
>>> [s.append(i.lower()) if not i.islower() else s.append(i) for i in p]
>>> s
>>> ['this', 'that', 'there', 'is','apple']
এই সমাধানটি ছোট হাতের আইটেমগুলি সম্বলিত পৃথক তালিকা তৈরি করবে, তাদের আসল কেস নির্বিশেষে। যদি আসল কেসটি উপরের হয় তবে list s
এতে সংশ্লিষ্ট আইটেমের ছোট হাতের অক্ষর থাকবে list p
। যদি তালিকার আইটেমটির মূল কেসটি ইতিমধ্যে ছোট হাতের অক্ষরে থাকে list p
তবে list s
আইটেমটির কেসটি ধরে রাখবে এবং এটিকে ছোট হাতের অক্ষরে রাখবে। এখন আপনি list s
পরিবর্তে ব্যবহার করতে পারেন list p
।
যদি আপনার উদ্দেশ্যটি একটি পাসে রূপান্তর করে অন্য স্ট্রিংয়ের সাথে মিলে যায় তবে আপনি str.casefold()
পাশাপাশি ব্যবহার করতে পারেন ।
এটি কার্যকর যখন আপনার অ-এস্কি অক্ষর থাকে এবং এসকিআই সংস্করণগুলির সাথে মিলে যায় (যেমন: মাই বনাম ম্যাসেস) suchএমন ক্ষেত্রে ব্যর্থ str.lower
বা str.upper
ব্যর্থ হলে str.casefold()
পাস হবে। এটি পাইথন 3 এ উপলভ্য এবং https://stackoverflow.com/a/31599276/4848659 উত্তর সহ ধারণাটি নিয়ে বিস্তারিত আলোচনা করা হয়েছে ।
>>>str="Hello World";
>>>print(str.lower());
hello world
>>>print(str.upper());
HELLO WOLRD
>>>print(str.casefold());
hello world
আপনি ব্যবহার করে চেষ্টা করতে পারেন:
my_list = ['india', 'america', 'china', 'korea']
def capitalize_list(item):
return item.upper()
print(list(map(capitalize_list, my_list)))
Python3.6.8
In [1]: a = 'which option is the fastest'
In [2]: %%timeit
...: ''.join(a).upper()
762 ns ± 11.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [3]: %%timeit
...: map(lambda x:x.upper(), a)
209 ns ± 5.73 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [4]: %%timeit
...: map(str.upper, [i for i in a])
1.18 µs ± 11.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [5]: %%timeit
...: [i.upper() for i in a]
3.2 µs ± 64.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
আপনার যদি আউটপুট হিসাবে স্ট্রিং বা তালিকার প্রয়োজন হয় এবং এটির পুনরুক্তিকারী নয় (এটি পাইথন 3 এর জন্য) তবে এর সাথে ''.join(string).upper()
বিকল্পটি তুলনা করুন :
In [10]: %%timeit
...: [i for i in map(lambda x:x.upper(), a)]
4.32 µs ± 112 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
আপনি যদি সমস্ত স্ট্রিংকে তালিকার ছোট হাতের অক্ষরে রূপান্তর করার চেষ্টা করছেন, আপনি পান্ডা ব্যবহার করতে পারেন:
import pandas as pd
data = ['Study', 'Insights']
pd_d = list(pd.Series(data).str.lower())
আউটপুট:
['study', 'insights']