【问题标题】:How to get arguments of a list in a list如何在列表中获取列表的参数
【发布时间】:2016-06-20 15:58:32
【问题描述】:

我正在使用 Python 3.5.1,我有这个列表:

my_list = [["could", "you", "please"], ["help", "me", "?"]]

列表可以有超过 2 个子列表,但子列表总是有 3 个元素。每个子列表中的变量在整个列表中都是唯一的。我想在整个列表中搜索“我”,然后将包含“我”的特定子列表中的每个值作为不同的值分配给其他值。 例如,它应该打印:

>>>help
>>>me
>>>? 

我也想在这删除一个子列表,怎么可能呢?到目前为止,我有这个:

for sublist in my_list:
    if "me" in sublist:

【问题讨论】:

  • 你为什么要使用print("help") 而不是,也许print(list) 也尽量不要使用list 作为变量名,它会影响内置函数。
  • 您要删除哪个子列表?
  • 这有关系吗?稍后我将需要它,但现在我只需要获取要分配的值。我想删除一个包含特定值的子列表
  • 感谢您在跟进我之前的评论后添加了一些详细信息,但这还不够:如果您想将子列表中的 3 个项目分配给 3 个标识符(如 var1, var2, var3),他们将只要在子列表中找到“我”,就会被覆盖。您在子列表中期待“我”多少次?可以覆盖以前分配的值吗?在检查下一个子列表之前,您想对每个有效的子列表执行一些操作吗?
  • 真实变量是唯一的,看起来像“f4d0b170-2877-4a92-90eb-eb950a57c636”,所以我认为覆盖不会有任何问题

标签: python list python-3.x


【解决方案1】:

您可以使用lambda & filter & in

print filter(lambda x: "me" in x,  my_list)

或使用__contains__ 方法。

print filter(lambda x: x.__contains__("me"),  my_list) 

它返回包含特定元素的所有嵌套列表

那么你可以遍历它们并将它们从外部列表中删除

for a in list(filter(lambda x: "me" in x,  my_list)):
     my_list.remove(a)

【讨论】:

  • 有了 lambda,你还不如使用 inlambda x: "me" in x
  • @Bahrom 是的,它更适合。谢谢
  • 在迭代其元素时切勿更新列表。在不同的样本上尝试一下,你就会明白为什么:my_list = [["could", "you", "please"], ["help", "me", "?"], ["test", "me"], ["how", "else"], ["is", "me"]]
  • @OliverW。有效,你试过吗?我正在迭代另一个具有相同元素的列表。
  • @Valentin 是的,我有。使用我提出的列表的结果是:[['could', 'you', 'please'], ['test', 'me'], ['how', 'else']]。请注意,结果列表中还有一个带有“me”的子列表。
【解决方案2】:

在您根据之前的评论进行更新后,您似乎正在寻找这个:

In [1]: my_list = [["could", "you", "please"], ["help", "me", "?"]]

In [2]: for sublist in my_list:
   ...:     if "me" in sublist:
   ...:         var1, var2, var3 = sublist
   ...:         do_something_with(var1, var2, var3)

请注意,var1, var2var3 将在任何时候在子列表中找到 "me" 时反弹为不同的值。这就是为什么我明确补充说,在进入下一个子列表之前,您需要对这些变量做一些事情。

只有 2 条评论:在您原来的 my_list 中,您的一个字符串缺少结束引号,并尽量不要影响 python 的内置函数:我已将 list in my_list 替换为 sublist in my_list

【讨论】:

  • 我不想打印它们,我只是想让它们分配给其他东西。例如 value1 = 帮助
  • @StamKaly 从您的原始帖子中不清楚。要回答您的具体问题,有很多事情需要考虑。您正在寻找解包列表,这取决于 1. 每个子列表的元素数量,2. 您的 Python 版本(您可以在 Python 3 中的变量中收集剩余的打包元素)。考虑为您的问题添加更多详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
相关资源
最近更新 更多