16

私はこのような2つのリストを持っています:

monkey = ['2\n', '4\n', '10\n']

banana = ['18\n', '16\n', '120\n']

これらの2つのリストでやりたいのは、3番目のリストを作成することです。これをバナナスプリットと呼びましょう。

値だけを残して削除し' \n'、次のように分割する式を作成する必要があります。

bananasplit[0] = banana[0]/monkey[0]

bananasplit[1] = banana[1]/monkey[1]

whileループを試しましたが、正しく理解できません。これが私がしたことです:

bananasplit = 3*[None]

i = 0

while i <= 2:

    [int(i) for i in monkey]

    [int(i) for i in banana]

    bananasplit[i] = banana[i]/monkey[i]

    i += 1

この小さな問題をどのように取り壊しますか?

4

4 に答える 4

27

以下はそれを行います:

>>> bananasplit = [int(b) / int(m) for b,m in zip(banana, monkey)]
>>> print(bananasplit)
[9, 4, 12]

元のコードに関する限り、主な問題は、以下が事実上ノーオペレーションであるということです。

[int(i) for i in monkey]
[int(i) for i in banana]

それらを有用なものに変えるには、結果をどこかに割り当てる必要があります。例:

monkey = [int(i) for i in monkey]
banana = [int(i) for i in banana]

/最後に、Pythonのバージョンに応じて、結果を切り捨てるか、浮動小数点の結果を返すことを使用して、ある整数を別の整数で除算することに注意してください。Python 2で、除算に使用した場合の「/」と「//」の違いは何ですか?を参照してください。

于 2013-01-21T08:11:45.890 に答える
2

このようなことを試してください。

bananasplit = [x/y for x, y in zip(map(int, banana), map(int, monkey))]

結果が必要な場合float(python 2.xの場合)、intsをfloatまたはに変更できます。from __future__ import division

于 2013-01-21T08:11:52.943 に答える
1

リストの反復とマップ機能により、非常に迅速にそこに到達できます。

>>> monkey = ['2\n', '4\n', '10\n']

>>> banana = ['18\n', '16\n', '120\n']

>>> monkey = [ float(m.strip()) for m in monkey]

>>> banana = [ float(m.strip()) for m in banana]

>>> def div(a,b):

...     return a/b

... 

>>> map(div, banana, monkey)

[9.0, 4.0, 12.0]

>>> 
于 2013-01-21T08:17:18.730 に答える
0

リスト内包表記は、新しい[an_expression for some_variable in some_sequence]リストを返します。あなたの例はこれらの結果を落とすだけです。

# remove trailing whitespace and convert strings to numbers
monkey_numbers = [int(item.strip()) for item in monkey]
banana_numbers = [int(item.strip()) for item in banana]

# a traditional loop
bananasplit = [] # an empty list
for i in range(len(banana_numbers)):
  # make bananasplit longer on each iteration
  bananasplit.append(banana_numbers[i] / monkey_numbers[i])

次に、式が非常に単純なので、ループの代わりにリスト内包表記を使用できます。2つのリストを取り、ペアのリストを作成するzip関数が必要になります。

# divide in one statement
bananasplit = [
  banana_portion / monkey_bunch 
  for (banana_portion, monkey_bunch) in 
  zip(banana_numbers, monkey_numbers)
]

もちろん、短い識別子を自由に使用できます。役割を理解しやすくするために長い名前を使用しました。

于 2013-01-21T08:26:06.760 に答える