1

PYTHON 3 を使用しています。リストの名前を変更せずに、LOOP 内に新しいリスト (浮動小数点数) を作成したいと考えています。これにより、すべての負またはゼロの要素が削除され、最終的にその長さが変更されます。それを行うための最速の方法は誰ですか? 私は最後の日をしようとして失われました...

(アップデート)

例:

import math

l= [0.]*10

for i in range(1,10):

l[i] = math.sin(i)

l = [x for  x in l if x > 0]

print(i, l[i])

まだ機能していません...

4

4 に答える 4

3

私があなたに与えることができる1つの方法:

new_list = [x for x in yourlist if not x <= 0 ] 

私は次のように試しました:

>>> yourlist = [1, -2 , 0 , 3.9 , 4 , -5.8, -3.0 ]
>>> new_list = [x for x in yourlist if not x <= 0 ] 
>>> print new_list
[1, 3.9, 4]

編集:

2 番目の方法:

L = [1, -2 , 0 , 3.9 , 4 , -5.8, -3.0 ]
out = []
for i in L[:]:
 if i > 0:
  out.append(i)

print out

EDIT2:
あなたが私の答えにコメントしたように、これが必要かもしれません:
第3の方法:

L = [1, -2 , 0 , 3.9 , 4 , -5.8, -3.0 ]
for obj in L[:]:
 if obj <= 0:
  del L[L.index(obj)]

print L 

あなたの(UPDATED)コード のEDIT3 エラー

あなたのコードで:

import math
l= [0.]*10

for i in range(1,10):
 l[i] = math.sin(i)

l = [x for  x in l if x > 0]
print(i, l[i])  

あなたはIndexErrorこのprint(i, l[i])行に着きました。なので後for-loop値にiなり9ます。そして、printステートメントの前に、リストからいくつかの要素を削除するl = [x for x in l if x > 0]ので、リストのサイズがl<の値よりも小さくなりiました。そして、間違った場所でprint(i, l[i])インデックスを作成しようとしてiいます!

なんでしょう?リストの最後の要素を出力したい場合は、次のようにします。

print(i, l[len(l)-1])
于 2013-01-12T19:01:19.337 に答える
1
my_list = [i for i in my_list if i>0]
于 2013-01-12T19:01:06.973 に答える
0

iterable から要素を簡単にフィルタリングするには、次の 2 つの方法があります。

output = [i for i in input if i > 0]

また:

output = filter(lambda i: i > 0, input)

[ ][1] はイテレータを返すので、リスト オブジェクトが必要な場合filter(function, iterable)は次のようにします。output = list(output)

于 2013-01-12T19:05:35.037 に答える
0

リストがあるとしますl = [-2, -1.4, 0, 1, 2.2, 3]

最初の方法は、単純にリスト内包表記を使用し、作成された新しいリストを参照するようにリストの名前を設定することです。

l = [i for i in l if i > 0]

もう 1 つの方法は、リストのコピーをループして、0 以下の要素を削除することです。

for i in l[:]:
    if i <= 0:
        l.remove(i)

いずれにせよ結果は[1, 2.2, 3]


あなたの更新に編集:

import math
l = []
for i in range(1, 10):
    v = math.sin(i)
    if v > 0:
        l.append(i)

for v in l:
    print(v)

0 または負の sin を持つすべての数値を除外すると、次のようになります。

0.841470984808
0.909297426826
0.14112000806
0.656986598719
0.989358246623
0.412118485242

EDIT2元の番号も必要な場合は、 Dictionary を使用します

import math
d = {}
for i in range(1, 10):
    v = math.sin(i)
    if v > 0:
        d[i] = v

for k in d:
    print(k, d[k])

またはタプル:

import math
l = []
for i in range(1, 10):
    v = math.sin(i)
    if v > 0:
        l.append((i, v))

for t in l:
    print(t[0], t[1])

これにより、次のようになります。

1 0.8414709848078965
2 0.9092974268256817
3 0.1411200080598672
7 0.6569865987187891
8 0.9893582466233818
9 0.4121184852417566
于 2013-01-12T19:18:00.817 に答える