Saya memiliki variabel daftar python yang berisi string. Apakah ada fungsi python yang dapat mengubah semua string dalam satu pass menjadi huruf kecil dan sebaliknya, huruf besar?
Saya memiliki variabel daftar python yang berisi string. Apakah ada fungsi python yang dapat mengubah semua string dalam satu pass menjadi huruf kecil dan sebaliknya, huruf besar?
Jawaban:
Ini dapat dilakukan dengan daftar pemahaman. Ini pada dasarnya berbentuk [function-of-item for item in some-list]
. Misalnya, untuk membuat daftar baru di mana semua item menggunakan huruf kecil (atau huruf besar dalam potongan kedua), Anda akan menggunakan:
>>> [x.lower() for x in ["A","B","C"]]
['a', 'b', 'c']
>>> [x.upper() for x in ["a","b","c"]]
['A', 'B', 'C']
Anda juga dapat menggunakan map
fungsi ini:
>>> 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"])
Selain lebih mudah dibaca (bagi banyak orang), pemahaman daftar juga memenangkan perlombaan cepat:
$ 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
memenangkan perlombaan, tetapi tidak melakukan apa-apa :)
map(str.lower,["A","B","C"])
tercepat adalah python3.7.5
>>> map(str.lower,["A","B","C"])
['a', 'b', 'c']
str.upper
untuk mengkonversi ke huruf besar
Pemahaman daftar adalah bagaimana saya melakukannya, itu adalah cara "Pythonic". Transkrip berikut menunjukkan cara mengonversi daftar ke semua huruf besar kemudian kembali ke bawah:
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
sebagai nama variabel bukan pilihan terbaik :)
list
hal - hal :)). Di mana Anda pikir UV Anda baru saja berasal? :)
Untuk sampel ini pemahamannya paling cepat
$ python -m timeit -s 's = ["one", "two", "three"] * 1000' '[x.upper untuk x dalam s]' 1000 loop, terbaik 3: 809 usec per loop $ python -m timeit -s 's = ["one", "two", "three"] * 1000' 'map (str.upper, s)' 1000 loop, terbaik 3: 1,12 msec per loop $ python -m timeit -s = ["satu", "dua", "tiga"] * 1000 'peta (lambda x: x.upper (), s)' 1000 loop, terbaik 3: 1,77 msec per loop
Larutan:
>>> 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']
Solusi ini akan membuat daftar terpisah berisi item huruf kecil, terlepas dari kasus aslinya. Jika kasing asli adalah atas maka list s
akan berisi huruf kecil dari masing-masing item dalam list p
. Jika kasing asli item daftar sudah huruf kecil list p
maka list s
akan menyimpan kasing item dan menyimpannya dalam huruf kecil. Sekarang Anda dapat menggunakan list s
bukan list p
.
Jika tujuan Anda adalah mencocokkan dengan string lain dengan mengonversi satu pass, Anda dapat menggunakannya str.casefold()
juga.
Ini berguna ketika Anda memiliki karakter non-ascii dan mencocokkan dengan versi ascii (misalnya: maße vs masse). Meskipun str.lower
atau str.upper
gagal dalam kasus tersebut, str.casefold()
akan berlalu. Ini tersedia dalam Python 3 dan idenya dibahas secara rinci dengan jawabannya https://stackoverflow.com/a/31599276/4848659 .
>>>str="Hello World";
>>>print(str.lower());
hello world
>>>print(str.upper());
HELLO WOLRD
>>>print(str.casefold());
hello world
Anda dapat mencoba menggunakan:
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)
Jika Anda membutuhkan string atau daftar sebagai output dan bukan iterator (ini untuk Python3), bandingkan ''.join(string).upper()
opsi dengan ini:
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)
Jika Anda mencoba mengonversi semua string menjadi huruf kecil dalam daftar, Anda dapat menggunakan panda:
import pandas as pd
data = ['Study', 'Insights']
pd_d = list(pd.Series(data).str.lower())
keluaran:
['study', 'insights']