【问题标题】:'else' statement in list comprehensions列表推导中的“else”语句
【发布时间】:2010-09-24 01:16:54
【问题描述】:

我有一个可以是字符串或元组的变量(我不知道提前),我需要将它作为一个列表来处理。

本质上,我想将以下内容转换为列表理解。

variable = 'id'
final = []
if isinstance(variable, str):
    final.append(variable)
elif isinstance(variable, tuple):
    final = list(variable)

我正在考虑以下内容(这给了我一个语法错误)。

final = [var for var in variable if isinstance(variable, tuple) else variable]

我见过这个question,但它不一样,因为提问者可以在最后使用for 循环;我的仅适用于元组。

注意:如果我使用 isinstance(variable, list)tuple 之一,我希望列表理解能够工作。

【问题讨论】:

  • 为什么需要它是字符串或元组?为什么不能是 unicode 或列表?
  • 我不确定列表推导在这里有什么用处,因为您拥有的代码不会通过迭代创建列表。你甚至没有for 循环。
  • 我的代码不需要 for 循环。但是如果我在列表理解中使用list(variable,它会在列表中创建一个不是我想要的列表(尽管我注意到@Matthew 的回答提供了一种解决方法)。 @Aaron:我不需要它是字符串或元组。它是以那种格式给我的。

标签: python list-comprehension


【解决方案1】:

我想你想要:

final = [variable] if isinstance(variable, str) else list(variable)

【讨论】:

  • 谢谢!这正是我想要的。
【解决方案2】:

你只需要重新排列一下。

final = [var if isinstance(variable, tuple) else variable for var in variable]

或者也许我误解了你真的想要

final = variable if not isinstance(variable, tuple) else [var for var in variable]

【讨论】:

  • 这将为示例提供['id', 'id'],因为它包含一个对每个字母的字符串的引用。
  • 谢谢!你的第二个似乎是我想要的。我接受了 Matthew 的,因为它更短更简单(因为他使用的是 list(variable) 而不是 [var for var in variable],尽管它们的含义相同。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 2018-05-27
  • 2022-07-16
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
相关资源
最近更新 更多