当前位置: 首页 > 面试题库 >

Python:根据条件拆分列表?

司空海荣
2023-03-14
问题内容

从美学角度和性能角度来看,基于条件将项目列表拆分为多个列表的最佳方法是什么?相当于:

good = [x for x in mylist if x in goodvals]
bad  = [x for x in mylist if x not in goodvals]

有没有更优雅的方法可以做到这一点?

更新:这是实际的用例,以更好地解释我正在尝试做的事情:

# files looks like: [ ('file1.jpg', 33L, '.jpg'), ('file2.avi', 999L, '.avi'), ... ]
IMAGE_TYPES = ('.jpg','.jpeg','.gif','.bmp','.png')
images = [f for f in files if f[2].lower() in IMAGE_TYPES]
anims  = [f for f in files if f[2].lower() not in IMAGE_TYPES]

问题答案:
good = [x for x in mylist if x in goodvals]
bad  = [x for x in mylist if x not in goodvals]

有没有更优雅的方法可以做到这一点?

该代码完全可读,而且非常清晰!

# files looks like: [ ('file1.jpg', 33L, '.jpg'), ('file2.avi', 999L, '.avi'), ... ]
IMAGE_TYPES = ('.jpg','.jpeg','.gif','.bmp','.png')
images = [f for f in files if f[2].lower() in IMAGE_TYPES]
anims  = [f for f in files if f[2].lower() not in IMAGE_TYPES]

再次,这很好!

使用集合可能会稍微改善性能,但这是微不足道的差异,而且我发现列表理解要容易阅读得多,并且你不必担心顺序被弄乱了,重复项被删除等等。

实际上,我可能会“向后”前进另一步,并且只使用一个简单的for循环:

images, anims = [], []

for f in files:
    if f.lower() in IMAGE_TYPES:
        images.append(f)
    else:
        anims.append(f)

列表理解或使用set()都很好,除非你需要添加其他检查或其他逻辑-说你要删除所有0字节jpeg,只需添加类似内容即可。

if f[1] == 0:
    continue


 类似资料:
  • 我有一个具体的问题。也有一些类似的问题,但这些问题要么与Python有关,而不是与Java有关,要么即使问题听起来类似,需求也不同。 我有一份价值观清单。 最后,我想根据列表的值对列表进行拆分。我的意思是,如果值大于零,它将保留在原始列表中,负值列表中的相应索引将设置为零。如果该值小于零,它将转到负值列表,原始列表中的负值将替换为零。 结果列表应该是这样的; 有没有办法解决这个流api在Java?

  • 问题内容: 我有一个具体的问题。有一些类似的问题,但是要么是Python的问题,要么是Java的问题,或者即使问题听起来很相似,要求也有所不同。 我有一个值列表。 归根结底,我想根据列表的值拆分列表。我的意思是,如果该值大于零,它将保留在原始列表中,并且负值列表中的相应索引将被设置为零。如果该值小于零,它将转到负值列表,原始列表中的负值将替换为零。 结果列表应该像这样; 有没有办法用Java中的S

  • 问题内容: 我试图根据该行的单元格中的值将其分为两行。例如,我具有以下表结构(这是一个临时表,没有任何键,索引或任何其他内容,我可以在另一个临时表中选择拆分结果): 然后,应将其拆分为: 问题答案: 我将使用

  • 问题内容: 我在包含一个大字符串的表中有一个 文本 字段,我要分离的字符串的每个部分都被一个小方块分开。 搜索时,我发现这可能是一个ascii值,所以我运行了它 返回 27 如何根据此ascii值将该字段拆分为单独的字段? 预先感谢克里斯 编辑:当前数据看起来像什么的例子。如果可能的话,将TEXT放在=之前作为标题将非常有用。 ABS_ID = 1234567 PERSON_ID = 123456

  • 我有一个数据库,其中多个变量显示为连续的行(如下所示,变量由其标记区分)。因此,它们的值在“值”列中显示为连续行。 现有表格: 对于数据分析,我需要将每个变量的值拆分为单独的列,如下所示。 下面列出了SQLite查询。我曾尝试使用分组标记并平均值,但结果变得过于细粒度,无法使用。 建议将不胜感激!

  • 问题内容: 如果我们在python中有一个,并且想要基于一些特殊的条件创建子列表,我们应该怎么做? 例如: 会产生: 问题答案: itertools.groupby是一种方法(通常是这样): 由于这种特殊情况,我们甚至可以作弊: