Bạn có thể sử dụng collections.Counter
:
>>> from collections import Counter
>>> [i for i,j in Counter[a].items[] if j>1]
['4', '8']
Hoặc bạn có thể sử dụng một chức năng tùy chỉnh:
>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
Hoặc sử dụng phương thức str.count
trong một thiết lập hiểu:
>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
Một điểm chuẩn trên tất cả các phương pháp, cho thấy 2 cách cuối cùng [chức năng tùy chỉnh và bộ toàn bộ đặt nhanh hơn nhiều so với Counter
]:
from timeit import timeit
s1="""
a = "12348546478"
[i for i,j in Counter[a].items[] if j>1]
"""
s2="""
def finder[s]:
seen,yields=set[],set[]
for i in s:
if i in seen:
if i not in yields:
yield i
yields.add[i]
else :
yields.add[i]
else:
seen.add[i]
a = "12348546478"
list[finder[a]]
"""
s3="""
a = "12348546478"
set[i for i in a if a.count[i]>1]
"""
print '1st: ' ,timeit[stmt=s1, number=100000,setup="from collections import Counter"]
print '2nd : ',timeit[stmt=s2, number=100000]
print '3rd : ',timeit[stmt=s2, number=100000]
kết quả :
1st: 0.726881027222
2nd : 0.265578985214
3rd : 0.26243185997
Tôi cũng đã thử điều này cho chuỗi dài [
>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
0] và vẫn có kết quả tương tự:1st: 25.5780302721341
2nd : 11.8482989001177
3rd : 11.926538944245
Bất cứ cách nào, đề xuất của tôi là sử dụng sự hiểu biết tập hợp hơn là Pythonic:
set[i for i in a if a.count[i]>1]
Làm thế nào để bạn kiểm tra xem một chuỗi không chứa các ký tự đặc biệt Python?
Re.Match [] để phát hiện một chuỗi có chứa các ký tự đặc biệt hoặc không trong Python. Đây là chức năng trong mô -đun Regex. Nó trả về một trận đấu khi tất cả các ký tự trong chuỗi được khớp với mẫu [ở đây trong mã của chúng tôi, nó là biểu thức chính quy] và không có gì nếu nó không được khớp.
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class Program14 {
Mayank
Map map = new HashMap[];
for [int i = 0; i < s1.length[]; i++] {
if [map.containsKey[s1.charAt[i]]]
map.put[s1.charAt[i], map.get[s1.charAt[i]] + 1];
else
map.put[s1.charAt[i], 1];
}
Set keys = map.keySet[];
for [Character ch : keys] {
if [map.get[ch] == 1]
System.out.print[ch + ” “];
}
}
// Đây là chương trình Java của tôi nhập java.util.hashmap; nhập java.util.map; nhập java.util.scanner; nhập java.util.set; Chương trình lớp công khai14 {
// TODO Auto-generated method stub
Scanner sc = new Scanner[System.in];
System.out.print[“Enter the String : “];
String s1 = sc.nextLine[];
foundUnique[s1];
}
static void Foundunique [Chuỗi S1] {Bản đồ MAP = new HashMap []; for [int i = 0; i >> def finder[s]: ... seen,yields=set[],set[] ... for i in s: ... if i in seen: ... if i not in yields: ... yield i ... yields.add[i] ... else : ... yields.add[i] ... else: ... seen.add[i] ... >>> list[finder[a]] ['4', '8'] 9
>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
0 >>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
11st: 25.5780302721341
2nd : 11.8482989001177
3rd : 11.926538944245
8>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4 set[i for i in a if a.count[i]>1]
0Phân tích độ phức tạp:
Độ phức tạp về thời gian: O [n], trong đó n là độ dài của chuỗi.
Không gian phụ trợ: O [26], trong tổng số có 26 chữ cái trong bảng chữ cái và không cần thêm không gian để nó là một hằng số.
Phương pháp số 3: Sử dụng các phương thức Danh sách [] và SET []
1st: 25.5780302721341
2nd : 11.8482989001177
3rd : 11.926538944245
8>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4 Counter
8>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
101st: 25.5780302721341
2nd : 11.8482989001177
3rd : 11.926538944245
8>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4 set[i for i in a if a.count[i]>1]
0set[i for i in a if a.count[i]>1]
1set[i for i in a if a.count[i]>1]
2Phân tích độ phức tạp:
- Độ phức tạp về thời gian: O [n], trong đó n là độ dài của chuỗi. O[N], where N is the length of the string.
- Không gian phụ trợ: O [26], trong tổng số có 26 chữ cái trong bảng chữ cái và không cần thêm không gian để nó là một hằng số. O[1], no extra space required so it is a constant.
Phương pháp số 3: Sử dụng các phương thức Danh sách [] và SET []:
81st: 25.5780302721341 2nd : 11.8482989001177 3rd : 11.926538944245
4>>> set[i for i in a if a.count[i]>1] set[['8', '4']]
Counter
8Counter[] function- Nếu các phím trong từ điển tần số [cung cấp số lượng các ký tự riêng biệt] bằng chiều dài của chuỗi thì in đúng
Implementation:
Python3
set[i for i in a if a.count[i]>1]
3 set[i for i in a if a.count[i]>1]
4set[i for i in a if a.count[i]>1]
5 Counter
>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
1 set[i for i in a if a.count[i]>1]
8>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
3collections.Counter
0>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4 collections.Counter
2Các
>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
9>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
0 1st: 25.5780302721341
2nd : 11.8482989001177
3rd : 11.926538944245
4>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
3str.count
6>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
8>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
9>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
0 >>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
11st: 25.5780302721341
2nd : 11.8482989001177
3rd : 11.926538944245
8>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4 set[i for i in a if a.count[i]>1]
0set[i for i in a if a.count[i]>1]
1set[i for i in a if a.count[i]>1]
2Phân tích độ phức tạp:
- Độ phức tạp về thời gian: O [n], trong đó n là độ dài của chuỗi., where N is the length of the string.
- Không gian phụ trợ: O [26], trong tổng số có 26 chữ cái trong bảng chữ cái và không cần thêm không gian để nó là một hằng số. O[26], in total there are 26 letters in alphabet and no extra space required so it is a constant.
Phương pháp số 3: Sử dụng các phương thức Danh sách [] và SET []
Python3
1st: 25.5780302721341
2nd : 11.8482989001177
3rd : 11.926538944245
8>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4 Counter
8Counter
9
>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
01from timeit import timeit
s1="""
a = "12348546478"
[i for i,j in Counter[a].items[] if j>1]
"""
s2="""
def finder[s]:
seen,yields=set[],set[]
for i in s:
if i in seen:
if i not in yields:
yield i
yields.add[i]
else :
yields.add[i]
else:
seen.add[i]
a = "12348546478"
list[finder[a]]
"""
s3="""
a = "12348546478"
set[i for i in a if a.count[i]>1]
"""
print '1st: ' ,timeit[stmt=s1, number=100000,setup="from collections import Counter"]
print '2nd : ',timeit[stmt=s2, number=100000]
print '3rd : ',timeit[stmt=s2, number=100000]
5>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
03>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
04>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
05>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
01>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
08>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
09>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
10>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
4>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
12>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
15>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
3set[i for i in a if a.count[i]>1]
1from timeit import timeit
s1="""
a = "12348546478"
[i for i,j in Counter[a].items[] if j>1]
"""
s2="""
def finder[s]:
seen,yields=set[],set[]
for i in s:
if i in seen:
if i not in yields:
yield i
yields.add[i]
else :
yields.add[i]
else:
seen.add[i]
a = "12348546478"
list[finder[a]]
"""
s3="""
a = "12348546478"
set[i for i in a if a.count[i]>1]
"""
print '1st: ' ,timeit[stmt=s1, number=100000,setup="from collections import Counter"]
print '2nd : ',timeit[stmt=s2, number=100000]
print '3rd : ',timeit[stmt=s2, number=100000]
51st: 25.5780302721341
2nd : 11.8482989001177
3rd : 11.926538944245
4>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
20str.count
6
>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
8>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
3set[i for i in a if a.count[i]>1]
1from timeit import timeit
s1="""
a = "12348546478"
[i for i,j in Counter[a].items[] if j>1]
"""
s2="""
def finder[s]:
seen,yields=set[],set[]
for i in s:
if i in seen:
if i not in yields:
yield i
yields.add[i]
else :
yields.add[i]
else:
seen.add[i]
a = "12348546478"
list[finder[a]]
"""
s3="""
a = "12348546478"
set[i for i in a if a.count[i]>1]
"""
print '1st: ' ,timeit[stmt=s1, number=100000,setup="from collections import Counter"]
print '2nd : ',timeit[stmt=s2, number=100000]
print '3rd : ',timeit[stmt=s2, number=100000]
5>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
1>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
20Phương pháp số 4: Sử dụng cho vòng lặp và tư cách thành viên Opeartors
Python3
1st: 25.5780302721341
2nd : 11.8482989001177
3rd : 11.926538944245
8>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4 Counter
8>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
31>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
33>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
10Phương pháp số 4: Sử dụng cho vòng lặp và tư cách thành viên Opeartors
from timeit import timeit
s1="""
a = "12348546478"
[i for i,j in Counter[a].items[] if j>1]
"""
s2="""
def finder[s]:
seen,yields=set[],set[]
for i in s:
if i in seen:
if i not in yields:
yield i
yields.add[i]
else :
yields.add[i]
else:
seen.add[i]
a = "12348546478"
list[finder[a]]
"""
s3="""
a = "12348546478"
set[i for i in a if a.count[i]>1]
"""
print '1st: ' ,timeit[stmt=s1, number=100000,setup="from collections import Counter"]
print '2nd : ',timeit[stmt=s2, number=100000]
print '3rd : ',timeit[stmt=s2, number=100000]
1 from timeit import timeit
s1="""
a = "12348546478"
[i for i,j in Counter[a].items[] if j>1]
"""
s2="""
def finder[s]:
seen,yields=set[],set[]
for i in s:
if i in seen:
if i not in yields:
yield i
yields.add[i]
else :
yields.add[i]
else:
seen.add[i]
a = "12348546478"
list[finder[a]]
"""
s3="""
a = "12348546478"
set[i for i in a if a.count[i]>1]
"""
print '1st: ' ,timeit[stmt=s1, number=100000,setup="from collections import Counter"]
print '2nd : ',timeit[stmt=s2, number=100000]
print '3rd : ',timeit[stmt=s2, number=100000]
2from timeit import timeit
s1="""
a = "12348546478"
[i for i,j in Counter[a].items[] if j>1]
"""
s2="""
def finder[s]:
seen,yields=set[],set[]
for i in s:
if i in seen:
if i not in yields:
yield i
yields.add[i]
else :
yields.add[i]
else:
seen.add[i]
a = "12348546478"
list[finder[a]]
"""
s3="""
a = "12348546478"
set[i for i in a if a.count[i]>1]
"""
print '1st: ' ,timeit[stmt=s1, number=100000,setup="from collections import Counter"]
print '2nd : ',timeit[stmt=s2, number=100000]
print '3rd : ',timeit[stmt=s2, number=100000]
3 >>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
37>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
4>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
50>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
4>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
53>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
3set[i for i in a if a.count[i]>1]
1from timeit import timeit
s1="""
a = "12348546478"
[i for i,j in Counter[a].items[] if j>1]
"""
s2="""
def finder[s]:
seen,yields=set[],set[]
for i in s:
if i in seen:
if i not in yields:
yield i
yields.add[i]
else :
yields.add[i]
else:
seen.add[i]
a = "12348546478"
list[finder[a]]
"""
s3="""
a = "12348546478"
set[i for i in a if a.count[i]>1]
"""
print '1st: ' ,timeit[stmt=s1, number=100000,setup="from collections import Counter"]
print '2nd : ',timeit[stmt=s2, number=100000]
print '3rd : ',timeit[stmt=s2, number=100000]
51st: 25.5780302721341
2nd : 11.8482989001177
3rd : 11.926538944245
4>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
20str.count
6
>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
8>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
3set[i for i in a if a.count[i]>1]
1from timeit import timeit
s1="""
a = "12348546478"
[i for i,j in Counter[a].items[] if j>1]
"""
s2="""
def finder[s]:
seen,yields=set[],set[]
for i in s:
if i in seen:
if i not in yields:
yield i
yields.add[i]
else :
yields.add[i]
else:
seen.add[i]
a = "12348546478"
list[finder[a]]
"""
s3="""
a = "12348546478"
set[i for i in a if a.count[i]>1]
"""
print '1st: ' ,timeit[stmt=s1, number=100000,setup="from collections import Counter"]
print '2nd : ',timeit[stmt=s2, number=100000]
print '3rd : ',timeit[stmt=s2, number=100000]
5>>> set[i for i in a if a.count[i]>1]
set[['8', '4']]
1>>> def finder[s]:
... seen,yields=set[],set[]
... for i in s:
... if i in seen:
... if i not in yields:
... yield i
... yields.add[i]
... else :
... yields.add[i]
... else:
... seen.add[i]
...
>>> list[finder[a]]
['4', '8']
20