Có rất nhiều tùy chọn để trích xuất số từ một danh sách các chuỗi.
Một danh sách chung các chuỗi được giả định như sau:
input_list = ['abc.123def45, ghi67 890 12, jk345', '123, 456 78, 90', 'abc def, ghi'] * 10000
Nếu việc chuyển đổi thành một số nguyên không được xem xét,
def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
def test_as_str[input_list]:
return list[itertools.chain[*[re.findall[r'\d+', string] for string in input_list]]]
%timeit -n 10 -r 7 test_as_str[input_list]
> 40.4 ms ± 202 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
def test_as_str[input_list]:
return list[filter[None, [item for string in input_list for item in re.split['[^\d]+' , string]]]]
%timeit -n 10 -r 7 test_as_str[input_list]
> 42.8 ms ± 372 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
Việc chuyển đổi thành một số nguyên cũng có thể được xem xét.
def test_as_int[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return list[map[int, output_list]]
%timeit -n 10 -r 7 test_as_int[input_list]
> 44.7 ms ± 232 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
def test_as_int[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return [int[item] for item in output_list]
%timeit -n 10 -r 7 test_as_int[input_list]
> 47.8 ms ± 198 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
def test_as_int[input_list]:
return [int[item] for string in input_list for item in re.findall[r'\d+', string]]
%timeit -n 10 -r 7 test_as_int[input_list]
> 48.3 ms ± 101 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
def test_as_int[input_list]:
return [int[item] for string in input_list for item in re.split['[^\d]+' , string] if item]
%timeit -n 10 -r 7 test_as_int[input_list]
> 51.4 ms ± 150 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
def test_as_int[input_list]:
return [int[item] for string in input_list for item in re.split['[^\d]+' , string] if item.isdigit[]]
%timeit -n 10 -r 7 test_as_int[input_list]
> 54.9 ms ± 210 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
0Bài kiểm tra hiệu suất, không hiển thị nhiều khác biệt, được thực hiện trên Windows OS, Python 3.8.8 Môi trường ảo.
Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Xem thảo luận
Cải thiện bài viết
Lưu bài viết
Đọc
Bàn luận
Đôi khi, chúng tôi có thể dữ liệu dưới nhiều hình thức và chúng tôi mong muốn thực hiện cả chuyển đổi và trích xuất một số phần cụ thể nhất định của tổng thể. Một vấn đề như vậy có thể trích xuất một số từ một chuỗi và mở rộng vấn đề này, đôi khi nó có thể không chỉ là một chuỗi phần tử mà là một danh sách của nó. Hãy để thảo luận về những cách nhất định trong đó điều này có thể được giải quyết.
Phương pháp số 1: Sử dụng danh sách hiểu +
def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
3Vấn đề cụ thể này có thể được giải quyết bằng cách sử dụng chức năng hiểu danh sách để mở rộng logic cho tất cả các mục và chức năng phân chia thực hiện nhiệm vụ phân tách và tìm nạp phần tử mong muốn mục tiêu.
def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
4def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
5 def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
6def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
7def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
8def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
9def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
8def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
1def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
8def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
3def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
4def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
5def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
6def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
7 def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
8 def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
9def test_as_str[input_list]:
return list[itertools.chain[*[re.findall[r'\d+', string] for string in input_list]]]
%timeit -n 10 -r 7 test_as_str[input_list]
> 40.4 ms ± 202 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
0
1def test_as_str[input_list]:
return list[itertools.chain[*[re.findall[r'\d+', string] for string in input_list]]]
%timeit -n 10 -r 7 test_as_str[input_list]
> 40.4 ms ± 202 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
5def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
1
5def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
6def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
6 def test_as_str[input_list]:
return list[filter[None, [item for string in input_list for item in re.split['[^\d]+' , string]]]]
%timeit -n 10 -r 7 test_as_str[input_list]
> 42.8 ms ± 372 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
8 def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
9def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
9def test_as_str[input_list]:
return list[filter[None, [item for string in input_list for item in re.split['[^\d]+' , string]]]]
%timeit -n 10 -r 7 test_as_str[input_list]
> 42.8 ms ± 372 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
Đầu ra:
Phương pháp số 1: Sử dụng danh sách hiểu +
def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
3Vấn đề cụ thể này có thể được giải quyết bằng cách sử dụng chức năng hiểu danh sách để mở rộng logic cho tất cả các mục và chức năng phân chia thực hiện nhiệm vụ phân tách và tìm nạp phần tử mong muốn mục tiêu.
def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
4def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
5 def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
6def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
7def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
8def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
9def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
8def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
1def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
8def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
3def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
4def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
5def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
6def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
7 def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
8 def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
9def test_as_str[input_list]:
return list[itertools.chain[*[re.findall[r'\d+', string] for string in input_list]]]
%timeit -n 10 -r 7 test_as_str[input_list]
> 40.4 ms ± 202 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
0def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
5def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
6def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
7 def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
8 def test_as_str[input_list]:
output_list = []
[output_list.extend[re.findall[r'\d+', string]] for string in input_list]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 39.5 ms ± 118 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
9def test_as_str[input_list]:
return list[itertools.chain[*[re.findall[r'\d+', string] for string in input_list]]]
%timeit -n 10 -r 7 test_as_str[input_list]
> 40.4 ms ± 202 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
0
1def test_as_str[input_list]:
return list[itertools.chain[*[re.findall[r'\d+', string] for string in input_list]]]
%timeit -n 10 -r 7 test_as_str[input_list]
> 40.4 ms ± 202 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
5def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
def test_as_str[input_list]:
output_list = []
for string in input_list:
output_list += re.findall[r'\d+', string]
return output_list
%timeit -n 10 -r 7 test_as_str[input_list]
> 37.6 ms ± 168 µs per loop [mean ± std. dev. of 7 runs, 10 loops each]
1