整数とリストがあります。変数で始まりリストで終わる新しいリストを作りたいと思います。 a + list
と書くとエラーになります。コンパイラはa
を整数として扱うので、私はappendを使うことも拡張もできません。どうしますか?
>>> a = 5
>>> li = [1, 2, 3]
>>> [a] + li # Don't use 'list' as variable name.
[5, 1, 2, 3]
>>>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)
と同じ意味になります。
特にループの中でその操作を頻繁にやろうとしているのであれば、 リストは間違ったデータ構造 です。
リストは先頭の変更に対して最適化されておらず、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
同じことをする別の方法
list[0:0] = [a]
新しいリストは、単にリストをまとめて追加することによって作成できます。
list1 = ['value1','value2','value3']
list2 = ['value0']
newlist=list2+list1
print(newlist)
timeit
モジュールを使用したいくつかの(最小限の)ベンチマークに基づいて、以下は一般に認められた答えよりも性能が良くないにしても類似しているようです
new_lst = [a, *lst]
[a] + list
と同様に、これは新しいリストを作成し、lst
を変更しません。
あなたの意図がリストを変更することであるならばlst.insert(0, a)
を使ってください。
あなたはUnpackリストを使うことができます:
a = 5
li = [1,2,3]
li = [a、* li]
=> [5、1、2、3]
list_1.insert(0,ur_data)
ur_dataが文字列型であることを確認して、data= int(5)
がur_data = str(data)
に変換するようにします。
これらのどれも私のために働きませんでした。最初の要素をシリーズの一部(単一要素シリーズ)に変換し、2番目の要素もシリーズになるように変換して、append関数を使用しました。
l = ((pd.Series(<first element>)).append(pd.Series(<list of other elements>))).tolist()