[英]Write function mult3() that takes as input a list of integers and prints only the multiples of 3, one per line
[英]Write a function, called filter_out(), which takes a list of integers as input and return the list filtered by only keeping numbers
編寫一個名為 filter_out() 的 function,它以整數列表作為輸入,並返回僅保留 5 或 7 的倍數但不能同時保留的數字過濾的列表,例如 list = [5, 7, 35, 49 ] 返回 [5, 7, 49]。
我的問題是我無法刪除都是 5 和 7 的倍數的數字。
def filter_out(my_list):
a_list = []
for number in my_list:
if number % 5 == 0 or number % 7 == 0:
a_list.append(number)
return a_list
print(filter_out([1, 2, 3, 5]))
[5]
print(filter_out([5, 7, 35, 49]))
[5, 7, 49]
您可以檢查數字是否不能除以 35。
if (number % 5 == 0 or number % 7 == 0) and number % 35 != 0:
a_list.append(number)
您必須添加一個條件來檢查:
def filter_out(my_list):
a_list = []
for number in my_list:
if (number % 5 == 0 or number % 7 == 0) and number % 35 != 0:
a_list.append(number)
return a_list
我檢查了除以 35,因為那當然是 5*7
您可以使用以下 function 使用numpy
對列表進行矢量化,然后
mod(list_array, 5)
和mod(list_array, 7)
。drop
= 在 list_array 中找到在上一步中為零的值的交集。keep
= 所有值 - 來自第 2 步的值(這是您想要的)。最終實現是單行 function 調用,如下所示。
# call function to get list of numbers to keep and to drop
keep, drop = process_to_keep(list_of_values, n=5, m=7)
帶有示例和 Output 的代碼
import numpy as np
# dummy data
l = [5, 7, 35, 49]
# function to process data
def process_to_keep(list_of_values, n=5, m=7):
a = np.array(list_of_values)
A = a%n
B = a%m
drop = set(a[A==0]).intersection(set(a[B==0]))
keep = set(a) - drop
return list(sorted(keep)), list(sorted(drop))
# call function to get list of numbers to keep and to drop
keep, drop = process_to_keep(l, n=5, m=7)
print(' keep: {}\n drop: {}'.format(keep, drop))
Output :
keep: [49, 5, 7]
drop: [35]
另一個例子
function 是通用的。 所以我們可以用另一個列表來測試它: [5,7,30,35,42,49,50,70,100,105]
。
keep, drop = process_to_keep([5,7,30,35,42,49,50,70,100,105], n=5, m=7)
print(' keep: {}\n drop: {}'.format(keep, drop))
Output :
keep: [5, 7, 30, 42, 49, 50, 100]
drop: [35, 70, 105]
再舉一個例子
假設您要檢查一個數字列表是否可以單獨被 10 或 7 整除,但不能同時被兩者整除。 同樣的 function 也可以解決這個問題。
keep, drop = process_to_keep([5,7,30,35,42,49,50,70,100,105], n=10, m=7)
print(' keep: {}\n drop: {}'.format(keep, drop))
Output :
keep: [5, 7, 30, 35, 42, 49, 50, 100, 105]
drop: [70]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.