0

我有一个“字典-valueiterator”组。对于每个组列表,我随机抽样两个(或更多值)并存储在一个新列表中

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>]]

在某些情况下,我有两个或更多列表(例如:)

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

我希望在新列表中存储一个逐个列表,以便在我有两个或多个liblas.point.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>]]

列表理解是最好的方法吗?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)(其中ab是列表)导致与以下循环相同的行为(但更有效):

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; 命名它们groupsgroups_list.
  • list([])更容易写成[]
  • point_random_selection list可能应该避免将参数命名为,因为它会影响全局list()函数
  • 似乎您可以将大部分替换point_random_selection
return random.sample(the_list, min(n, len(the_list))
于 2013-02-12T20:05:52.857 回答