मेरे पास एक अजगर सूची चर है जिसमें तार शामिल हैं। क्या एक पायथन फ़ंक्शन है जो एक पास के सभी तारों को लोअरकेस में बदल सकता है और इसके विपरीत, अपरकेस?
मेरे पास एक अजगर सूची चर है जिसमें तार शामिल हैं। क्या एक पायथन फ़ंक्शन है जो एक पास के सभी तारों को लोअरकेस में बदल सकता है और इसके विपरीत, अपरकेस?
जवाबों:
यह सूची समझ के साथ किया जा सकता है। ये मूल रूप से का रूप ले लेते हैं [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
>>> map(str.lower,["A","B","C"])
['a', 'b', 'c']
str.upper
से अपरकेस में परिवर्तित होने के लिए
सूची की समझ है कि मैं यह कैसे करूँगा, यह "पायथोनिक" तरीका है। निम्न प्रतिलेख दिखाता है कि किसी सूची को सभी ऊपरी मामलों में वापस कैसे परिवर्तित किया जाए:
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
सामान के अलावा :)) आलोचना नहीं कर रहा था । आपको क्या लगता है कि युवी आपको हाल ही में कहां से मिला है? :)
इस नमूने के लिए समझ सबसे तेज है
$ python -m timeit -s 's = ["एक", "दो", "तीन"] * 1000' '[x.upper for x in s]' 1000 लूप्स, सर्वश्रेष्ठ 3: 809 usec प्रति लूप $ python -m timeit -s 's = ["एक", "दो", "तीन"] * 1000' 'नक्शा (str.upper, s)' 1000 लूप, सर्वश्रेष्ठ 3: 1.12 मिसेक प्रति लूप $ python -m timeit -s 's = ["एक", "दो", "तीन"] * 1000' 'नक्शा (लैम्ब्डा x: x.upper (), s)' 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()
।
यह तब उपयोगी होता है जब आपके पास गैर-एससीआई अक्षर होते हैं और एससीआई संस्करणों के साथ मिलान होता है (जैसे: maße vs masse) । इस तरह के मामलों में विफल 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']