2010-08-04 82 views
2

我有一個腳本可以創建一個數字列表,並且我想從列表中刪除所有不是整數的數字(即,小數點後有零以外的任何數字)但是python會創建一個列表,甚至整個數字都會被放到最後,因此我不能用數字和其他任何東西區別開來。我不能使用int()函數,因爲它適用於所有這些函數,並使它們成爲整數,然後我會失去原來的那些。如何判斷列表中的項目是否包含某些字符

這裏是我的代碼:

z = 300 
mylist = [] 

while(z > 1): 
    z = z - 1 
    x = 600851475143/z 
    mylist.append(x) 

print(mylist) 

[y for y in mylist if y #insert rule to tell if it contains .0 here] 

的第一位剛好在轉彎300和1之間的每一個數字除以600851475143。然後我需要過濾這個列表來獲取只有整數的那個。我有一個過濾器,但在那裏的評論是我需要一個規則,會告訴如果列表中的特定值有.0

這樣可以實現的任何方式?

回答

2

可以使用divmod的(),只有把結果的「甚至分裂」中 列表:

z = 300 
mylist = [] 

while(z > 1): 
    z = z - 1 
    x,y = divmod(600851475143, z) 
    if y==0: 
     mylist.append(x) 

print(mylist) 
+0

我寧願'商,餘數= divmod ...'和'如果不是餘數:' – hop 2010-08-04 10:54:02

4

你正在執行一個整數除法,所以你的結果無論如何都是整數。

即使您將除以float(z)代替,您也可能會遇到舍入錯誤的風險,因此檢查.0不會是一個好主意。

也許你想要的是

if 600851475143 % z == 0: 
    mylist.append(600851475143/z) 

這就是所謂的「模運算符」,比照。 http://docs.python.org/reference/expressions.html#binary-arithmetic-operations

編輯:拉爾夫是對的,我沒有把劃分結果放入列表中。現在它看起來很醜,由於分裂的重複... :) gnibbler的回答可能是可取的,或拉爾夫的。

+0

他正在使用Python 3作爲「print」調用顯示,並且在Python 3中, /總是返回一個浮點數,而// // y返回floor(x/y)。除此之外,正確的。 – delnan 2010-08-04 10:01:33

+0

我認爲@Ralph是正確的:)因此,應該是'mylist.append(600851475143/z)'。 – delnan 2010-08-04 10:11:57

0

使用regular expressions來匹配你所需要的。在你的情況下,應該在字符串的末尾檢查「.0」,因此re.search("\.0$", y)。請注意,您應該使用re.search,因爲re.match只檢查字符串開頭的匹配項。

編輯:對不起,我是用不過

蟒蛇失望創建列表,其中甚至 整數得到0.0

,並認爲你正在它的字符串列表。豆豆給你答案。

1

您可以使用int() - 只是沒有辦法的辦法,你在想也許

z = 300 
mylist = [] 

while(z > 1): 
    z = z - 1 
    x = 600851475143/z 
    mylist.append(x) 

print(mylist) 

[y for y in mylist if y==int(y)] 
0

豆形軟糖的答案是相當不錯的,所以我想總結一下:

magic_num = 600851475143 
filtered_list = [magic_num/i for i in range(300,0,-1) if magic_num%i == 0] 

(該分部運算符應該是整數//,但代碼着色器將其解釋爲註釋,因此我已經留下了單斜槓)

相關問題