Hướng dẫn python filter function with multiple arguments - hàm lọc python với nhiều đối số

15

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Đưa ra danh sách sau:

DNA_list = ['ATAT', 'GTGTACGT', 'AAAAGGTT']

Tôi muốn lọc các chuỗi dài hơn 3 ký tự. Tôi đạt được điều này với mã sau:

Với cho vòng lặp:

long_dna = []
for element in DNA_list:
    length = len[element]
    if int[length] > 3:
        long_dna.append[element]
print long_dna

Nhưng tôi muốn mã của mình nói chung hơn, vì vậy sau này tôi có thể lọc các chuỗi có độ dài nào, vì vậy tôi sử dụng một hàm và cho vòng lặp:

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2

Tôi muốn đạt được cùng một tổng quát bằng cách sử dụng

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
0 nhưng tôi không thể đạt được điều này. Nếu tôi sử dụng hàm trên
def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
1, tôi chỉ đơn giản là không thể chuyển các đối số cho nó khi tôi sử dụng nó với
def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
0. Nó chỉ là không thể hoặc có một cách xung quanh nó?

Mã của tôi với

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
0 cho trường hợp cụ thể:

def is_long[dna]:
        return len[dna] > 3

    long_dna_filter = filter[is_long, DNA_list]

Thefourtheye

226K52 Huy hiệu vàng443 Huy hiệu bạc486 Huy hiệu Đồng52 gold badges443 silver badges486 bronze badges

Hỏi ngày 5 tháng 1 năm 2016 lúc 10:53Jan 5, 2016 at 10:53

Sử dụng

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
4 để cung cấp ngưỡng, như thế này:

filter[lambda seq: get_long[seq, 3],
       dna_list]

Đã trả lời ngày 5 tháng 1 năm 2016 lúc 10:57Jan 5, 2016 at 10:57

Những gì bạn đang cố gắng làm được gọi là ứng dụng chức năng một phần: Bạn có một chức năng có nhiều đối số [trong trường hợp này là 2] và muốn lấy một hàm có nguồn gốc từ nó với một hoặc nhiều đối số được sửa, sau đó bạn có thể chuyển sang

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
5 .

Một số ngôn ngữ [đặc biệt là các ngôn ngữ] có chức năng này "tích hợp". Trong Python, bạn có thể sử dụng lambdas để làm điều này [như những người khác đã hiển thị] hoặc bạn có thể sử dụng thư viện

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
6. Cụ thể,
def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
7:

Phần [] được sử dụng cho ứng dụng chức năng một phần, trong đó đóng băng một số phần của một đối số chức năng và/hoặc từ khóa dẫn đến một đối tượng mới có chữ ký đơn giản hóa. Ví dụ: một phần [] có thể được sử dụng để tạo một cuộc gọi có thể gọi hoạt động giống như hàm int [] trong đó đối số cơ sở mặc định là hai:

>>> from functools import partial
>>> basetwo = partial[int, base=2]
>>> basetwo.__doc__ = 'Convert base 2 string to an int.'
>>> basetwo['10010']
18

Vì vậy, bạn có thể làm:

filter[functools.partial[get_long, treshold=13], DNA_list]

Đã trả lời ngày 5 tháng 1 năm 2016 lúc 11:03Jan 5, 2016 at 11:03

LaugsleartsLeartS

2.8062 huy hiệu vàng24 Huy hiệu bạc44 Huy hiệu đồng2 gold badges24 silver badges44 bronze badges

Bạn có cần sử dụng

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
0? Tại sao không sử dụng một danh sách pythonic hơn?

Example:

>>> DNA_list = ['ATAT', 'GTGTACGT', 'AAAAGGTT']
>>> threshold = 3
>>> long_dna = [dna_seq for dna_seq in DNA_list if len[dna_seq] > threshold]
>>> long_dna
['ATAT', 'GTGTACGT', 'AAAAGGTT']

>>> threshold = 4
>>> [dna_seq for dna_seq in DNA_list if len[dna_seq] > threshold]
['GTGTACGT', 'AAAAGGTT']

Phương pháp này có lợi thế là tầm thường để chuyển đổi nó thành một trình tạo có thể cung cấp bộ nhớ và thực thi được cải thiện tùy thuộc vào ứng dụng của bạn, ví dụ: Nếu bạn có nhiều chuỗi DNA và bạn muốn lặp lại chúng, nhận ra chúng như một danh sách sẽ tiêu thụ rất nhiều bộ nhớ trong một lần. Trình tạo tương đương chỉ cần thay thế dấu ngoặc vuông

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
9 bằng dấu ngoặc tròn
def is_long[dna]:
        return len[dna] > 3

    long_dna_filter = filter[is_long, DNA_list]
0:

>>> long_dna = [dna_seq for dna_seq in DNA_list if len[dna_seq] > threshold]

>>> list[long_dna]
['GTGTACGT', 'AAAAGGTT']

Trong Python 2 Cải thiện hiệu suất này không phải là một tùy chọn với

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
0 vì nó trả về danh sách. Trong Python 3
def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
0 trả về một đối tượng bộ lọc gần giống với trình tạo.

Đã trả lời ngày 5 tháng 1 năm 2016 lúc 11:29Jan 5, 2016 at 11:29

Mhawkemhawkemhawke

81.9K9 Huy hiệu vàng113 Huy hiệu bạc135 Huy hiệu Đồng9 gold badges113 silver badges135 bronze badges

1

Bạn có thể làm cho

def is_long[dna]:
        return len[dna] > 3

    long_dna_filter = filter[is_long, DNA_list]
3 trả về một hàm, có thể chấp nhận
def is_long[dna]:
        return len[dna] > 3

    long_dna_filter = filter[is_long, DNA_list]
4, như thế này

>>> def is_long[length]:
...     return lambda dna: len[dna] > length
... 

và sau đó sử dụng nó trong

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
5, như thế này

long_dna = []
for element in DNA_list:
    length = len[element]
    if int[length] > 3:
        long_dna.append[element]
print long_dna
0

Lưu ý: Không sử dụng toán tử

def is_long[dna]:
        return len[dna] > 3

    long_dna_filter = filter[is_long, DNA_list]
6 để so sánh booleans hoặc số. Thay vào đó dựa vào sự thật của dữ liệu càng nhiều càng tốt. Vì vậy, trong trường hợp của bạn, bạn có thể đã viết phiên bản thứ hai của mình như thế này Don't use
def is_long[dna]:
        return len[dna] > 3

    long_dna_filter = filter[is_long, DNA_list]
6 operator to compare booleans or numbers. Instead rely on the truthiness of the data as much as possible. So, in your case, you could have written your second version like this

long_dna = []
for element in DNA_list:
    length = len[element]
    if int[length] > 3:
        long_dna.append[element]
print long_dna
1

Trích dẫn các khuyến nghị lập trình trong PEP-8,

Đừng so sánh các giá trị boolean với đúng hoặc sai bằng cách sử dụng ==.

long_dna = []
for element in DNA_list:
    length = len[element]
    if int[length] > 3:
        long_dna.append[element]
print long_dna
2

Đã trả lời ngày 5 tháng 1 năm 2016 lúc 10:59Jan 5, 2016 at 10:59

Thefourtheyethefourtheyethefourtheye

226K52 Huy hiệu vàng443 Huy hiệu bạc486 Huy hiệu Đồng52 gold badges443 silver badges486 bronze badges

Hỏi ngày 5 tháng 1 năm 2016 lúc 10:53

Sử dụng

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
4 để cung cấp ngưỡng, như thế này:

long_dna = []
for element in DNA_list:
    length = len[element]
    if int[length] > 3:
        long_dna.append[element]
print long_dna
3

Đã trả lời ngày 5 tháng 1 năm 2016 lúc 10:57

Những gì bạn đang cố gắng làm được gọi là ứng dụng chức năng một phần: Bạn có một chức năng có nhiều đối số [trong trường hợp này là 2] và muốn lấy một hàm có nguồn gốc từ nó với một hoặc nhiều đối số được sửa, sau đó bạn có thể chuyển sang

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
5 .Apr 5, 2017 at 2:28

Một số ngôn ngữ [đặc biệt là các ngôn ngữ] có chức năng này "tích hợp". Trong Python, bạn có thể sử dụng lambdas để làm điều này [như những người khác đã hiển thị] hoặc bạn có thể sử dụng thư viện

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
6. Cụ thể,
def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
7:Statham

Phần [] được sử dụng cho ứng dụng chức năng một phần, trong đó đóng băng một số phần của một đối số chức năng và/hoặc từ khóa dẫn đến một đối tượng mới có chữ ký đơn giản hóa. Ví dụ: một phần [] có thể được sử dụng để tạo một cuộc gọi có thể gọi hoạt động giống như hàm int [] trong đó đối số cơ sở mặc định là hai:2 gold badges30 silver badges44 bronze badges

Vì vậy, bạn có thể làm:

Đã trả lời ngày 5 tháng 1 năm 2016 lúc 11:03

long_dna = []
for element in DNA_list:
    length = len[element]
    if int[length] > 3:
        long_dna.append[element]
print long_dna
4

LaugsleartsAug 29, 2018 at 20:05

2.8062 huy hiệu vàng24 Huy hiệu bạc44 Huy hiệu đồngDurai

Bạn có cần sử dụng

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
0? Tại sao không sử dụng một danh sách pythonic hơn?4 silver badges12 bronze badges

Phương pháp này có lợi thế là tầm thường để chuyển đổi nó thành một trình tạo có thể cung cấp bộ nhớ và thực thi được cải thiện tùy thuộc vào ứng dụng của bạn, ví dụ: Nếu bạn có nhiều chuỗi DNA và bạn muốn lặp lại chúng, nhận ra chúng như một danh sách sẽ tiêu thụ rất nhiều bộ nhớ trong một lần. Trình tạo tương đương chỉ cần thay thế dấu ngoặc vuông

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
9 bằng dấu ngoặc tròn
def is_long[dna]:
        return len[dna] > 3

    long_dna_filter = filter[is_long, DNA_list]
0:

Trong Python 2 Cải thiện hiệu suất này không phải là một tùy chọn với
def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
0 vì nó trả về danh sách. Trong Python 3
def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
0 trả về một đối tượng bộ lọc gần giống với trình tạo.

Đã trả lời ngày 5 tháng 1 năm 2016 lúc 11:29

long_dna = []
for element in DNA_list:
    length = len[element]
    if int[length] > 3:
        long_dna.append[element]
print long_dna
6

Mhawkemhawke

long_dna = []
for element in DNA_list:
    length = len[element]
    if int[length] > 3:
        long_dna.append[element]
print long_dna
7

81.9K9 Huy hiệu vàng113 Huy hiệu bạc135 Huy hiệu Đồng

long_dna = []
for element in DNA_list:
    length = len[element]
    if int[length] > 3:
        long_dna.append[element]
print long_dna
8

Bạn có thể làm cho

def is_long[dna]:
        return len[dna] > 3

    long_dna_filter = filter[is_long, DNA_list]
3 trả về một hàm, có thể chấp nhận
def is_long[dna]:
        return len[dna] > 3

    long_dna_filter = filter[is_long, DNA_list]
4, như thế nàyJan 5, 2016 at 11:34

và sau đó sử dụng nó trong

def get_long[dna_seq, threshold]:
    return len[dna_seq] > threshold

long_dna_loop2 = []
for element in DNA_list:
    if get_long[element, 3] is True:
        long_dna_loop2.append[element]
print long_dna_loop2
5, như thế nàyPM 2Ring

Lưu ý: Không sử dụng toán tử

def is_long[dna]:
        return len[dna] > 3

    long_dna_filter = filter[is_long, DNA_list]
6 để so sánh booleans hoặc số. Thay vào đó dựa vào sự thật của dữ liệu càng nhiều càng tốt. Vì vậy, trong trường hợp của bạn, bạn có thể đã viết phiên bản thứ hai của mình như thế này5 gold badges78 silver badges167 bronze badges

Trích dẫn các khuyến nghị lập trình trong PEP-8,

long_dna = []
for element in DNA_list:
    length = len[element]
    if int[length] > 3:
        long_dna.append[element]
print long_dna
9

Đừng so sánh các giá trị boolean với đúng hoặc sai bằng cách sử dụng ==.Jan 5, 2016 at 18:21

Đã trả lời ngày 5 tháng 1 năm 2016 lúc 10:59Noctis Skytower

Thefourtheyethefourtheye16 gold badges79 silver badges112 bronze badges

Một hàm Python có thể có nhiều đối số không?

Chúng ta có thể chuyển nhiều đối số cho hàm Python bằng cách xác định trước các tham số chính thức trong định nghĩa hàm..

Một chức năng có thể có nhiều đối số?

Các chức năng có thể chấp nhận nhiều hơn một đối số.Khi gọi một hàm, bạn có thể chuyển nhiều đối số cho hàm;Mỗi đối số được lưu trữ trong một tham số riêng biệt và được sử dụng như một biến riêng biệt trong hàm.. When calling a function, you're able to pass multiple arguments to the function; each argument gets stored in a separate parameter and used as a discrete variable within the function.

Bộ lọc [] trong Python là gì?

Python's Filter [] là một chức năng tích hợp cho phép bạn xử lý một thứ có thể lặp lại và trích xuất những mục đáp ứng một điều kiện nhất định.Quá trình này thường được gọi là hoạt động lọc.a built-in function that allows you to process an iterable and extract those items that satisfy a given condition. This process is commonly known as a filtering operation.

Hàm bộ lọc [] lấy gì làm tham số?

Hàm bộ lọc có hai tham số: Hàm: Hàm kiểm tra xem các phần tử của một thứ có thể đúng là đúng hoặc sai.Nếu không có, hàm mặc định cho chức năng nhận dạng trả về sai nếu có bất kỳ phần tử nào là sai.Có thể lặp lại: Có thể lọc được có thể là bộ, bộ dữ liệu, danh sách hoặc thùng chứa của bất kỳ trình lặp.Function that tests if elements of an iterable are True or false. If none, the function defaults to identity function returning false if any elements are false. Iterable: Iterable which is to be filtered could be sets, tuples, lists or containers of any iterators.

Bài Viết Liên Quan

Chủ Đề