1

私は次のように見える巨大なリストを持っています:

[ '0', '21', '51', '67', '96', '102', '128', '130', '0', '11', '36', '53', '81', '86', '113', 116', '0', '21', '48', '64', '91', '95','125', '139', '166', '175', '200', '205']

次のように、リストの要素に対して単純な減算を実行する必要があります。

// 2つの変数a&bを検討します//

aは0〜21の差を格納する必要があります(負の値を避けるために21〜0にする必要があります)

それから

bは21-51の差を保存する必要があります(負の値を避けるために51-21にする必要があります)

また

aは51-67の差を保存する必要があります(負の値を避けるために67-51である必要があります)

その後

b = 67-96
a = 96-102
b = 102-128
a = 128-130

130と次の間に減算があってはなりません0。新しいイテレーションは0-11,11-36、次のイテレーション0に遭遇するまで、以下同様に開始する必要があります。

私はこのステップをどのように進めるかについて完全に考えがありません。

4

3 に答える 3

1

問題の説明はまだはっきりしていません。私が理解していることから、これはあなたが探しているものかもしれません。

li = [ 0, '21', '51', '67', '96', '102', '128', '130', '0', '11', '36', '53', '81', '86', '113', '116', '0', '21', '48', '64', '91', '95','125', '139', '166', '175', '200', 205]   

# Convert all items to integers for calculations
li = [int(x) for x in li]

for x, y in zip(li, li[1:]):
    if y != 0:
        a = abs(x - y)      
        print '|%3d - %3d| = %3d' % (x, y, a)
    else:
        print ''

出力:

|  0 -  21| =  21
| 21 -  51| =  30
| 51 -  67| =  16
| 67 -  96| =  29
| 96 - 102| =   6
|102 - 128| =  26
|128 - 130| =   2

|  0 -  11| =  11
| 11 -  36| =  25
| 36 -  53| =  17
| 53 -  81| =  28
| 81 -  86| =   5
| 86 - 113| =  27
|113 - 116| =   3

|  0 -  21| =  21
| 21 -  48| =  27
| 48 -  64| =  16
| 64 -  91| =  27
| 91 -  95| =   4
| 95 - 125| =  30
|125 - 139| =  14
|139 - 166| =  27
|166 - 175| =   9
|175 - 200| =  25
|200 - 205| =   5
于 2013-03-21T02:32:55.170 に答える
1

リストに偶数の要素が含まれている限り、これは機能します。

# original list
l = ['0', '21', '51', '67', '96', '102', '128', '130']

# convert items in list to integers
l = map(lambda x: int(x), l)

# split the list in two, even indices in p, odd indices in q
p = l[::2]
q = l[1::2]

# print out the calculations
for n in range(len(p)):
    print 'abs(%s - %s) = %s' % (p[n], q[n], abs(p[n]-q[n]))

次のように出力されます。

abs(0 - 21) = 21
abs(51 - 67) = 16
abs(96 - 102) = 6
abs(128 - 130) = 2

上記のコードでスライスコピーが何をするのかわからない場合は、次を確認してください。

>>> l[::2]
['0', '51', '96', '128']
>>> l[1::2]
['21', '67', '102', '130']

構文はそうlist_name[starting_point:ending_point:increment_by]です。

于 2013-03-21T02:44:23.950 に答える
0
li = [ 0, '21', '51', '67', '96', '102', '128', '130', '0', '11', '36', '53', '81', '86', '113', '116', '0', '21', '48', '64', '91', '95','125', '139', '166', '175', '200', 205]


li = [(int(li[i]),int(li[i+1])) for i in range( len( li ) - 1 ) if li[i+1] != '0']


for a, b in li:
    x = abs(a - b)
    print '|%3d - %3d| = %3d' % (a,b,x)
于 2013-03-21T02:43:33.037 に答える