簡體   English   中英

編寫一個 function,稱為 filter_out(),它以整數列表作為輸入,返回僅保留數字過濾的列表

[英]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對列表進行矢量化,然后

  1. 評估mod(list_array, 5)mod(list_array, 7)
  2. drop = 在 list_array 中找到在上一步中為零的值的交集。
  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM