web-dev-qa-db-ja.com

Pythonのリストの先頭に整数を追加

整数とリストがあります。変数で始まりリストで終わる新しいリストを作りたいと思います。 a + listと書くとエラーになります。コンパイラはaを整数として扱うので、私はappendを使うことも拡張もできません。どうしますか?

353
gen
>>> a = 5
>>> li = [1, 2, 3]
>>> [a] + li  # Don't use 'list' as variable name.
[5, 1, 2, 3]
499
Rohit Jain
>>>var=7
>>>array = [1,2,3,4,5,6]
>>>array.insert(0,var)
>>>array
[7, 1, 2, 3, 4, 5, 6]

使い方:

array.insert(index, value)

特定の位置にアイテムを挿入します。最初の引数は挿入する要素のインデックスであるため、array.insert(0, x)はリストの先頭に挿入され、array.insert(len(array), x)array.append(x)と同じ意味になります。

500
Nullify

特にループの中でその操作を頻繁にやろうとしているのであれば、 リストは間違ったデータ構造 です。

リストは先頭の変更に対して最適化されておらず、somelist.insert(0, something)O(n)操作 です。

somelist.pop(0)del somelist[0]もO(n)操作です。

使用する正しいデータ構造はdequeモジュールからの collections です。 dequesはリストのインターフェースに似たインターフェースを公開しますが、両方のエンドポイントからの変更に対して最適化されています。先頭に挿入するためのappendleftメソッドがあります。

デモ:

In [1]: lst = [0]*1000
In [2]: timeit -n1000 lst.insert(0, 1)
1000 loops, best of 3: 794 ns per loop
In [3]: from collections import deque
In [4]: deq = deque([0]*1000)
In [5]: timeit -n1000 deq.appendleft(1)
1000 loops, best of 3: 73 ns per loop
80
timgeb

同じことをする別の方法

list[0:0] = [a]
37
v2b

新しいリストは、単にリストをまとめて追加することによって作成できます。

list1 = ['value1','value2','value3']
list2 = ['value0']
newlist=list2+list1
print(newlist)
1
Erico9001

timeitモジュールを使用したいくつかの(最小限の)ベンチマークに基づいて、以下は一般に認められた答えよりも性能が良くないにしても類似しているようです

new_lst = [a, *lst]

[a] + listと同様に、これは新しいリストを作成し、lstを変更しません。

あなたの意図がリストを変更することであるならばlst.insert(0, a)を使ってください。

1
Dovi Salomon

あなたはUnpackリストを使うことができます:

a = 5

li = [1,2,3]

li = [a、* li]

=> [5、1、2、3]

0
HoangYell
list_1.insert(0,ur_data)

ur_dataが文字列型であることを確認して、data= int(5)ur_data = str(data)に変換するようにします。

0
sahil panindre

これらのどれも私のために働きませんでした。最初の要素をシリーズの一部(単一要素シリーズ)に変換し、2番目の要素もシリーズになるように変換して、append関数を使用しました。

l = ((pd.Series(<first element>)).append(pd.Series(<list of other elements>))).tolist()
0
aparna ramesh