0

「dictionary-valueiterator」グループがあります。グループのリストごとに、2 つ (またはそれ以上の値) をランダムにサンプリングし、新しいリストに保存します。

GroupsList = list([])
  for m in Groups:
     GroupsList.append(point_random_selection(m,n))

どこでpoint_random_selection

def point_random_selection(list,n):
    if n == 0:
            raise TypeError("The pulse density 0 is not iterable")
    try:
        sample_point = random.sample(list,n)
    except ValueError:
        sample_point = list
    return sample_point

GroupsList = [[<liblas.point.Point object at 0x00000001363A0E10>],
 [<liblas.point.Point object at 0x00000002CE52CB38>],
 [<liblas.point.Point object at 0x00000000CF516908>],
 [<liblas.point.Point object at 0x00000004293F9400>],
 [<liblas.point.Point object at 0x0000000249F67C50>],
 [<liblas.point.Point object at 0x0000000312D85A90>],
 [<liblas.point.Point object at 0x000000047DF396A0>,
  <liblas.point.Point object at 0x000000047DF14F98>]]

場合によっては、2つ以上のリストがあります(例:)

GroupsList[6]
[<liblas.point.Point object at 0x000000047DF396A0>,
 <liblas.point.Point object at 0x000000047DF14F98>]

次のように2つ以上のliblas.point.Pointオブジェクトがある場合にも、1つずつ追加するために、1つのリストごとのリストを新しいリストに保存したいと思います。

GroupsList = [[<liblas.point.Point object at 0x00000001363A0E10>],
     [<liblas.point.Point object at 0x00000002CE52CB38>],
     [<liblas.point.Point object at 0x00000000CF516908>],
     [<liblas.point.Point object at 0x00000004293F9400>],
     [<liblas.point.Point object at 0x0000000249F67C50>],
     [<liblas.point.Point object at 0x0000000312D85A90>],
     [<liblas.point.Point object at 0x000000047DF396A0>],
     [<liblas.point.Point object at 0x000000047DF14F98>]]

それはリスト内包表記が最善のアプローチですか? ex に挿入する

GroupsList.append(point_random_selection(m,n))
4

2 に答える 2

2

私がこれを正しく理解していれば、リスト内包表記[[a, b], [c, d]]を使用するように、ネストされたリストを変更する必要があります。[a, b, c, d]それがあなたがやろうとしていることの正しい解釈である場合、次のことがうまくいきます:

GroupsList = [point for lst in GroupsList for point in lst]

ただし、ループを次のように変更して ( を に置き換えappend()extend()) 、最初からフラットな構造を作成することをお勧めします。

for m in Groups:
    GroupsList.extend(point_random_selection(m,n))

a.extend(b)(whereaおよびbare リスト) は、次のループと同じ動作になります (ただし、より効率的です)。

for x in b:
    a.append(x)
于 2013-02-12T20:06:40.653 に答える
1

あなたの質問を正しく読んでいるかどうかは完全にはわかりませんが、お探しlist.extendですか? 例えば:

>>> a = [1, 2]
>>> a.extend([5, 1, 4])
>>> a
[1, 2, 5, 1, 4]

また、いくつかの一般的なスタイル フィードバック:

  • 標準の Python スタイルでは、変数にGroupor などの名前を付けることは強く推奨されていませんGroupsList。名前を付けるgroupsか、groups_list.
  • list([])より簡単に次のように記述されます。[]
  • グローバル関数を隠してしまうため、引数に to という名前をpoint_random_selection list付けることは、おそらく避けるべきです。list()
  • ほとんどを置き換えることができるようpoint_random_selectionです
return random.sample(the_list, min(n, len(the_list))
于 2013-02-12T20:05:52.857 に答える