0

次のリストがあります

lst = ['Adam,widgets,5769', 'joe,balls,7186', 'greg,tops,1819.999',]

リストを取得し、Adams の数を 100 などで割って、その新しい数をリストに戻し、それを gregs total に追加できるようにする必要があります。リストを分割することから始めました。コードを正しくするには、リストの各部分を分離して、個々の部分として表示できるようにする方法が必要です。

for i in sod_hng_hhl_lst:
    g=i.split(",")

これは与える

['Adam','widgets','5769']

数を分割してリスト内の別のグループに追加する最良の方法は何ですか?

4

3 に答える 3

1

It looks to me like a dictionary would be a MUCH better data structure.

splitter = (x.split(',') for x in original_list)
d = { k:[v1,float(v2)] for k,v1,v2 in splitter }

Now you can access the data by the person's name:

assert d['Adam'][1] == 5769

In other words, d['Adam'] will give you the list ['widget',5769] and from there you can change the number, add it to other peoples numbers, etc.

于 2012-11-08T16:19:59.133 に答える
1
In [1]: lst = ['Adam,widgets,5769', 'joe,balls,7186', 'greg,tops,1819.999']

In [2]: lst = [s.split(',') for s in lst]

In [4]: for l in lst:
    l[-1] = float(l[-1])
   ...:     

In [5]: for l in lst:
   ...:     if l[0] == "Adam":
   ...:         l[-1] /= 100
   ...:         

In [6]: lst
Out[6]: 
[['Adam', 'widgets', 57.69],
 ['joe', 'balls', 7186.0],
 ['greg', 'tops', 1819.999]]
于 2012-11-08T16:18:08.717 に答える
1

常に 3 つの項目があることがわかっている場合は、この方法でタプルのアンパックを使用します。

name,type,number = i.split(',')
# now name="Adam", type="widgets", number="5769"

あなたのサンプルでは:

for triplet in sod_hng_hhl_lst:
    name,type,numberString = triplet.split(",")
    # because this is a string and we want a number:
    num_as_integer = int(numberString)
    # do something with num_as_integer
    new_number = num_as_integer * 2
    newtriplet = ','.join([name, type, new_number])

ただし、分割された文字列ではなく、値のタプルを使用することを強くお勧めします。

sod_hng_hhl_lst = [ ('Adam', 'widgets', 5769),
                    #... etc
                  ]

この方法では、数値は数値のままであり、常に文字列を結合および分割する必要はありません。

for idx,triplet in enumerate(sod_hng_hhl_lst):
    name,type,number = triplet
    new_number = number * 2
    # change just the number in the triplet
    sod_hng_hhl_lst[idx][2] = new_number 

人々が常に一意の名前を持っている場合、mgilson が提案するように、辞書を使用できます。

dct = {"Adam": ('widgets', 5769),
       #....
      }

反復:

for person,details in dct.items():
    thing, number = details
    new_num = number * 2
    dct[person][1] = new_num
于 2012-11-08T16:17:29.640 に答える