1

リストがあります。10アイテムの長さだとしましょう。すべて文字列型のリスト項目です。最初の 2 つを文字列のままにして、3 番目から 10 番目の項目を整数型オブジェクトに変更する簡単な方法を見つけようとしています。パイソン3.3

ええ、それはうまく機能していなかったので、それを独自のリストに分割しようとしましたが、これが起こりました.

Traceback (most recent call last):

  File "project1.py", line 10, in <module>

    hList=list(map(int,row[2:]))                       #row is the name of my string list

ValueError: invalid literal for int() with base 10: '6.67'

印刷を試みたところhList、ループ内の 24 個のうち最初の 4 個が表示されました

4

4 に答える 4

10

これは、スライスの割り当てで簡単に実行できます

>>> l = list(map(str, range(10)))
>>> l[2:] = map(int, l[2:])
>>> l
['0', '1', 2, 3, 4, 5, 6, 7, 8, 9]

この問題に取り組む別の方法は、それを2つのリストとして分割し、そのうちの1つを整数リストに変換することです。

>>> l = list(map(str, range(10)))
>>> l = l[:2] + map(int, l[2:])
>>> l
['0', '1', 2, 3, 4, 5, 6, 7, 8, 9]

違いは、後者の場合、前者のようにインプレースlistで更新する新しい場所を作成することです。list

@Ashwiniが言及したように、Python 3、mapはリストではなくマップオブジェクトを返すので、list呼び出しを介して渡すか、リスト内包表記にする方がよい場合があります

l[2:] = [int(e) for e in  l[2:]]

また

l[2:] = list(map(int, l[2:]))
于 2013-01-18T08:20:11.870 に答える
2

リスト内包表記を使用できます。

>>> mylist[2:] = [int(l) for l in mylist[2:]]

>>> mylist
['0', '1', 2, 3, 4, 5, 6, 7, 8, 9]
于 2013-01-18T08:23:18.597 に答える
1

これは、インデックスをループで使用するまれなケースです。

In [1]: l = list(map(str, range(10)))

In [2]: l
Out[2]: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

In [3]: for i in range(2, 10):
   ...:     l[i] = int(l[i])
   ...:     

In [4]: l
Out[4]: ['0', '1', 2, 3, 4, 5, 6, 7, 8, 9]

または、Abhijitが示すようにスライス割り当てを使用します。

リストを使用する場合は...

  1. 均質ではありません(一部の項目は整数であり、一部はそうではありません)、
  2. その長さは固定されています(事前に10です)、

その場合、リストはデータ構造の最良の選択ではないかもしれません。代わりにtupleまたはを使用することを検討してください。モジュールにdictは、これらの優れた拡張機能もいくつかあります。collections

于 2013-01-18T08:17:53.040 に答える
0

単純なforループでそれを行うことができます:

my_list = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
new_list = []
for index in range(2, 10): # start at 2 because indexing starts at 0
    my_num = float(my_list[index]) # if the number was not an integer, but a float, it is better to use float(),
    new_list.append(my_num)        # which can handle both floats and integers
print new_list # so you can see the result

出力:

[3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
于 2013-01-18T13:42:03.583 に答える