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àylong_dna = []
for element in DNA_list:
length = len[element]
if int[length] > 3:
long_dna.append[element]
print long_dna
0Lưu ý: Không sử dụng toán tử
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]
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 thislong_dna = []
for element in DNA_list:
length = len[element]
if int[length] > 3:
long_dna.append[element]
print long_dna
1Trí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 ==.
2long_dna = [] for element in DNA_list: length = len[element] if int[length] > 3: long_dna.append[element] print long_dna
Đã 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
4 để cung cấp ngưỡng, như thế này: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
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:StathamPhầ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
4LaugsleartsAug 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
0? Tại sao không sử dụng một danh sách pythonic hơn?4 silver badges12 bronze badges
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
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
6Mhawkemhawke
long_dna = []
for element in DNA_list:
length = len[element]
if int[length] > 3:
long_dna.append[element]
print long_dna
781.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
8Bạ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 2RingLưu ý: Không sử dụng toán tử
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 badgesdef is_long[dna]:
return len[dna] > 3
long_dna_filter = filter[is_long, DNA_list]
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