4

あなたはリストを与えました。リストの長さはさまざまです。

As an example:
1. ll = [1,2,3]
2. ll = [1,2,3,4]
3. ll = [1,2] 
4. ll = []

値を 3 つの変数に格納したいのですが、

var1,var2,var3 = None,None,None

If ll[0] exists then var1 = ll[0]
If ll[1] exists then var2 = ll[1]
If ll[3] exists then var3 = ll[2]

私は解決策を書きましたが、if elseが含まれています。私が書いたコード:-

var1,var2,var3 = None,None,None
if len(ll) == 1: 
    var1,var2,var3 = ll[0],None,None
elif len(ll) == 2: 
    var1,var2,var3 = ll[0],ll[1],None
else:
    var1,var2,var3 = ll[0],ll[1],ll[2]

IF/Else を使用せずにこれを解決する良い方法はありますか。

4

6 に答える 6

12

たぶん一番シンプル

var1, var2, var3 = (ll + [None] * 3)[:3]
于 2013-10-22T10:55:45.603 に答える
1

これを拡張して、スライスできることに依存するのではなく、任意のイテラブルを許可します。たとえば、次のようになります。

from itertools import chain, repeat, islice
a, b, c = islice(chain(your_iterable, repeat(None)), 3)

ただし、そのように展開したくない場合は、 a を使用することを検討しますdictが、これはセマンティクスがわずかに異なります。

var = dict(enumerate(islice(your_iterable, 3), start=1))
var[1] # first item (think of it as `var1`) or
var.get(1) # but get `None` if it wasn't "unpacked"
于 2013-10-22T11:00:41.090 に答える
1

解凍を使用できます:

ll = [1,2,3]
var1, var2, var3 = (ll + [None]*len(ll))[:3]
print var1
# 1
print var2
# 2
print var3
# 3
ll = [1,2]
var1, var2, var3 = (ll + [None]*len(ll))[:3]
print var1
# 1
print var2
# 2
print var3
# None

は、ll + [None]*len(ll)を追加することにより、現在のリストに追加 (または削除) し[None, etc]ます。sの量はNone、リストの長さによって異なります。

たとえば、リストが の場合、そのリストに[1]追加[None, None]されるため、同じ量の要素があるため、アンパックでエラーは発生しません。

おそらく、次のような条件を使用する方がよいでしょう。

if len(ll) > 3:
    var1, var2, var3 = ll[:3]
else:
    var1, var2, var3 = ll + [None] * (3-len(ll))
于 2013-10-22T10:48:36.850 に答える
0

私がこれを奨励していなくても:

var1, var2, var3 = ll[:3] + [None] * (3-min(3, len(ll)))

基本的に、欠損値をNoneのリストで埋めます。

于 2013-10-22T10:48:07.713 に答える
0

今のところ itertools ベースのソリューションがないため:

import itertools as it
var1, var2, var3 = list(it.chain(ll, it.repeat(None, 3- len(ll))))[:3]

ただ、それはばかげている

于 2013-10-22T10:59:41.720 に答える
0

このスニペットを試してください

# You can use other values for this list
default_list = [None] * 3 # Same as None, None, None
var1, var2, var3 = ll[:len(default_list)] + default_list[len(ll):]

default_list基本的には、欠落しているインデックスを の値で埋めるのと同じサイズのリストを作成しますdefault_list

于 2013-10-22T10:52:15.753 に答える