python中的列表操作,一个lis中有3个列表

2024-05-19 16:24:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一系列的清单-基本上

[ [[val1, val2...], [val3, val4...]...], [[val5, val6...], [val7, val8...]...], ...]  

在python上,打印得很漂亮,输出如下所示:

[[['a',
   'b',
   'c',
   'test1',
   'd',
   'e',
   'f',
   'g'],
  ['h',
   'i',
   'j',
   'k',
   'l',
   'm']],
 [['n',
   'o',
   'p',
   'test2',
   'q',
   'r',
   's',
   't'],
  ['u',
   'v',
   'w',
   'x',
   'y',
   'z']]]

如何将test1和test2作为两个单独的项放入列表中:

[ ['test1'], ['test2'] ]

这看起来很简单,但我不确定如何使用列表理解或遍历列表来获得它,因为有些值包含8个实体,有些值包含6个实体。你知道吗


Tags: 实体列表test1test2val1很漂亮val2val3
3条回答
x = [[[21434,
   'CSCI 1111',
   'MPA 310',
   'Prof-name',
   'yes',
   'Introduction to Software Development',
   '3.00',
   'TR11:10AM - 12:25PM'],
  [2143521434,
   'CSCI 1111',
   'TOMP 405',
   'Laboratory',
   21434,
   'T04:10PM - 06:00PM']],
 [[21434,
   'CSCI 1111',
   'MPA 310',
   'Prof-name',
   'yes',
   'Introduction to Software Development',
   '3.00',
   'TR11:10AM - 12:25PM'],
  [2189021434,
   'CSCI 1111',
   'TOMP 406',
   'Laboratory',
   21434,
   'T04:10PM - 06:00PM']]]


prof_list = []
for xlist in x:
    for l in xlist:
        if len(l) == 8:
            prof_list.append(l[3])

print(prof_list)

或者

prof_list = [l[3] for xlist in x for l in xlist if len(l) == 8]
print(prof_list)

首先试着把它用英语表达,然后翻译成Python。你知道吗

  • 你有一个顶级名单。您需要每个子列表中的prof-name。你知道吗
  • 每个子列表有两个子列表。您只需要第一个子列表。你知道吗
  • 每个子列表都有一组字符串,6或8。不管怎样,你只想要第四个。你知道吗

其中每一个都很容易翻译成Python:

  • 每个子列表:for sublst in lst。你知道吗
  • 每个子列表的第一个元素:sublst[0]。你知道吗
  • 每个子列表的第四个元素:sublst[0][3]。你知道吗

把它放在一起:

[sublst[0][3] for sublst in lst]

英文描述适用于您的示例,因此代码适用于您的示例。如果这不是一套合适的规则,那就提出一套不同的规则,它们同样容易翻译。你知道吗

例如,也许你不想要第四个,你想要那些以prof-开头的?你知道吗

在这种情况下:

  • 每个子列表。你知道吗
  • 第一个子列表。你知道吗
  • Prof-开头的子列表的每个元素。你知道吗

最后一个有点棘手,我们不能只做element.startswith('Prof-'),因为有些元素是整数。我们来写一个函数:

def prof(element):
    return isinstance(element, str) and element.startswith('Prof-')

现在:

  • for sublst in lst
  • sublst[0]
  • for element in sublst[0] if prof(element)

综合起来:

[element for sublst in lst for element in sublst[0] if prof(element)] 

但也许那太密集了。一旦你在一个理解中有了三个分句,就很难推理了。也许我们应该先把它展平,然后过滤:

elements = (element for sublst in lst for element in sublst[0])
profs = [element for element in elements if prof(element)]

稍微长一点,但希望更容易理解。你知道吗

具体来说:

oldlist = your_input_list
prof_dict={}
newlist=[]
for idx,entries in enumerate(oldlist[0]):
    newlist.append([entries[0][3]])
    prof_dict[idx]=entries[0][3]]

这将生成一个请求列表(包含在newlist)和一个字典(prof_dict),以便您可以以一种非常简单的方式确定您的教授名字出现在列表中的什么位置,以备需要。你知道吗

相关问题 更多 >