0

次のタプルのリストがあります。

>>> list_of_tuples = [(0, 0), (0, -1), (1, -1), (1, -2), (1, -3), (1, -4), (0, -4), (0, -3), (-1, -3), (-2, -3), (-2, -2), (-2, -1), (-1, -1), (-1, -2), (0, -2)]

そして私は以下が欲しい:

>>> addvalues(list_of_tuples)
[(2, 0), (2, -1), (3, -1), (3, -2), (3, -3), (3, -4), (2, -4), (2, -3), (1, -3), (0, -3), (0, -2), (0, -1), (1, -1), (1, -2), (2, -2)]
#original
>>> list_of_tuples
[(0, 0), (0, -1), (1, -1), (1, -2), (1, -3), (1, -4), (0, -4), (0, -3), (-1, -3), (-2, -3), (-2, -2), (-2, -1), (-1, -1), (-1, -2), (0, -2)]

list_of_tuplesのタプルの場合、tuple [0]の最小値は-2であり、最小値が0になるまですべてのタプル[0]に値を追加したいのですが、どうすればよいですか?(通常、最小値は-2である必要はありません)

4

6 に答える 6

3

おそらくもっと良い方法がありますが、これはうまくいきます。最小のアイテムを見つけます。0未満の場合は、各タプルの最初の項目に追加します。

list_of_tuples = [(0, 0), (0, -1), (1, -1), (1, -2), (1, -3), (1, -4), (0, -4), (0, -3), (-1, -3), (-2, -3), (-2, -2), (-2, -1), (-1, -1), (-1, -2), (0, -2)]
to_add = min(list_of_tuples)[0]
if to_add < 0:
    list_of_tuples = [(a[0]-to_add, a[1]) for a in list_of_tuples]

# [(2, 0), (2, -1), (3, -1), (3, -2), (3, -3), (3, -4), (2, -4), (2, -3), (1, -3), (0, -3), (0, -2), (0, -1), (1, -1), (1, -2), (2, -2)]
于 2012-12-03T23:07:22.930 に答える
0

それを行う別の方法:

to_add = 0 - min(list_of_tuples)[0]
new_list = [(i[0] + to_add, i[1]) for i in list_of_tuples]
于 2012-12-03T23:10:21.100 に答える
0

あなたは次のことをすることができます:-

list_of_tuples = [(0, 0), (0, -1), (1, -1), (1, -2), (1, -3), (1, -4), (0, -4), (0, -3), (-1, -3), (-2, -3), (-2, -2), (-2, -1), (-1, -1), (-1, -2), (0, -2)]

# get the min of x
minx = min(x for x, y in list_of_tuples)

# create the new list
new_tuples = [(x - minx, y) for x, y in list_of_tuples]

# do a test
assert new_tuples == [(2, 0), (2, -1), (3, -1), (3, -2), (3, -3), (3, -4), (2, -4), (2, -3), (1, -3), (0, -3), (0, -2), (0, -1), (1, -1), (1, -2), (2, -2)]
print("Passed")
于 2012-12-03T23:12:42.760 に答える
0

最小値を見つけて、それを引く必要があります。

min_ = min(l, key=lambda x:x[0])[0]

このようにして、最初にすべての要素をファンクション「キー」に渡し、次に最小値を見つけます。渡された関数はタプルの最初の要素を返すため、なぜそれが機能するのかがわかります。(キー引数の使用方法を示しました。この場合、minはすでにタプルの最初の要素を最初にチェックしているため、必要ありません。ただし、たとえば、2番目の要素、またはおそらくそれらの製品を検討したい場合は、それが方法です。トーゴ)

リストを変更するには、私があなたがやりたいことを正しく理解していれば、あなたはすることができます

[(x[0] + min_, x[1]) for x in l]

これはリスト内包表記と呼ばれ、

for x in l:
    y = (x[0] + min, x[1])
    new_list.append(y)
于 2012-12-03T23:13:57.630 に答える
0

正/負の数を処理するものが必要な場合は、これを試すことができます。タプルのリストから最小のx値を見つけ、値が0未満の場合は絶対値を取り、すべての数値をその数値だけインクリメントします。最小数が0より大きい場合、数は0ずつ増加します(つまり、何も変更されません)。返される結果は、更新されたタプルのリストです。

In [65]: def addvalues(l):
    min_x = min(l, key=lambda x: x[0])[0] # x[1] to work with the second element
    min_x = abs(min_x) if min_x < 0 else 0
    return [tuple((x+min_x, y)) for x, y in l]
   ....:

In [69]: addvalues(list_of_tuples)
Out[69]:
[(2, 0),
 (2, -1),
 (3, -1),
 (3, -2),
 (3, -3),
 (3, -4),
 (2, -4),
 (2, -3),
 (1, -3),
 (0, -3),
 (0, -2),
 (0, -1),
 (1, -1),
 (1, -2),
 (2, -2)]
于 2012-12-03T23:15:19.180 に答える
-1
In [52]: list_of_tuples = [(0, 0), (0, -1), (1, -1), (1, -2), (1, -3), (1, -4), (0, -4), (0, -3), (-1, -3), (-2, -3), (-2, -2), (-2, -1), (-1, -1), (-1, -2), (0, -2)]

In [53]: to_add = min(list_of_tuples, key=operator.itemgetter(0))[0] *-1

In [54]: to_add
Out[54]: 2

In [55]: [tuple([t[0]+2,t[1]]) for t in list_of_tuples]
Out[55]: 
[(2, 0),
 (2, -1),
 (3, -1),
 (3, -2),
 (3, -3),
 (3, -4),
 (2, -4),
 (2, -3),
 (1, -3),
 (0, -3),
 (0, -2),
 (0, -1),
 (1, -1),
 (1, -2),
 (2, -2)]

In [56]: list_of_tuples # input unchanged
Out[56]: 
[(0, 0),
 (0, -1),
 (1, -1),
 (1, -2),
 (1, -3),
 (1, -4),
 (0, -4),
 (0, -3),
 (-1, -3),
 (-2, -3),
 (-2, -2),
 (-2, -1),
 (-1, -1),
 (-1, -2),
 (0, -2)]

お役に立てれば

于 2012-12-03T23:06:50.680 に答える