【问题标题】:Combing different length elements into one list Python using a for and if loops使用 for 和 if 循环将不同长度的元素组合到一个 Python 列表中
【发布时间】:2018-12-13 03:47:39
【问题描述】:

输入:

a = [{'layer': 'OVC', 'ceiling': '020', 'type': None}]
b = [{'layer': 'BKN', 'ceiling': '010', 'type': None}, {'layer': 'OVC', 'ceiling': '020', 'type': None}]
c = [{'layer': 'BKN', 'ceiling': '010', 'type': None}, {'layer': 'BKN', 'ceiling': '020', 'type': None},{'layer': 'OVC', 'ceiling': '030', 'type': None}]
d = [a,b,c] 

results1 = []
results2 = [] 

for i in range(0,len(d)):
 res1=[]
 res2=[]
 cloudstf = d[i]
 if not cloudstf:
  res1 = "-9999"
  res2 = "-9999"
  results1.append(res1)
  results2.append(res2)
 elif len(d[i])==1:
  res1 = d[i]["layer"]
  res2 = d[i]["ceiling"]
  results1.append([res1])
  results2.append([res2])
 elif len(d[i])>1:
  for k in range(0,len(d)):
   res1 = d[i][k]["layer"]
   res2 = d[i][k]["ceiling"]
   results1.append([res1])
   results2.append([res2])
 cloudtf = []

cloud_group_layer = results1
cloud_group_height = results2 
print(cloud_group_height)
print(cloud_group_layer)

而不是得到:

cloud_group_layer = [['OVC'], ['BKN'], ['OVC'], ['BKN'],['BKN'],['OVC']]
cloud_group_height = [['020'], ['010'], ['020'], ['010'],['020'],['030']]

如何获得:

cloud_group_layer = [['OVC'], ['BKN','OVC'], ['BKN','BKN','OVC']]
cloud_group_height = [['020'], ['010','020'], ['010','020','030']]

层和高度按how many分组。代码全部存在,只是语法有点混乱。或者它可能是Tuple,因为高度。

您在运行它时可能会遇到此错误,这是因为索引:

Traceback (most recent call last):
  File "main.py", line 22, in <module>
    res1 = d[i]["layer"]
TypeError: list indices must be integers or slices, not str 

【问题讨论】:

    标签: python arrays python-3.x list


    【解决方案1】:

    您可以通过以下推导来做到这一点:

    代码:

    cloud_group_layer = [[x['layer'] for x in data] for data in d]
    cloud_group_height = [[x['ceiling'] for x in data] for data in d] 
    

    测试代码:

    a = [{'layer': 'OVC', 'ceiling': '020', 'type': None}]
    b = [{'layer': 'BKN', 'ceiling': '010', 'type': None},
         {'layer': 'OVC', 'ceiling': '020', 'type': None}]
    c = [{'layer': 'BKN', 'ceiling': '010', 'type': None},
         {'layer': 'BKN', 'ceiling': '020', 'type': None},
         {'layer': 'OVC', 'ceiling': '030', 'type': None}]
    
    d = [a, b, c]
    
    wanted_cloud_group_layer = [['OVC'], ['BKN', 'OVC'], ['BKN', 'BKN', 'OVC']]
    wanted_cloud_group_height = [['020'], ['010', '020'], ['010', '020', '030']]
    
    cloud_group_layer = [[x['layer'] for x in data] for data in d]
    cloud_group_height = [[x['ceiling'] for x in data] for data in d]
    
    assert wanted_cloud_group_layer == cloud_group_layer
    assert wanted_cloud_group_height == cloud_group_height
    

    【讨论】:

    【解决方案2】:

    简单的解决方案可能是获取要附加的列表,而不是该列表的元素。假设您要附加['BKN','OVC'],然后不附加['BKN']['OVC'],在获取它时附加整个列表。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 2018-08-12
      相关资源
      最近更新 更多