【问题标题】:Check if list contains an element and append to another list's values to a list检查列表是否包含一个元素并将另一个列表的值附加到列表
【发布时间】:2022-12-31 23:25:56
【问题描述】:

我有 3 个列表:

A = [32, 33, 54, 66, 67]
B = [33, 4, 67]
C = [A, B, C]

我想做的是我想检查列表 A 中的每个元素是否都在 B 中,那么它应该按顺序将 C 中的一个元素附加到列表 D 中,如果不是,那么它应该附加一个空字符串,这是我正在寻找的结果:

D = ['', A, '', '', B]

这是我写的,但是我在 A 在 B 中的每个位置都得到了其中所有元素的嵌套列表 C,所以我还应该循环 C 中的每个元素,你能告诉我我该怎么做吗?

D = []

for a in A:
    if a in B:
        D.append(C)
    else:
        D.append('')


result: D = ['', [A, B, C], '', '', [A, B, C]]

太感谢了

【问题讨论】:

  • 但根据你的描述,预期的输出应该是['', 'A', '', '', 'C']
  • 这是一个非常混乱的描述。首先,如果ABC变量,那么 C = [A, B, C] 将不起作用。其次,如果列表C 很短(比匹配数少)会怎样?“...按顺序从 C 追加一个元素...”更详细地描述这一点。
  • 列表BC 是否具有相同数量的元素?那有保证吗?

标签: python list for-loop append


【解决方案1】:

您可以尝试使用以下算法:

D = []
idx = 0
for elem in A:
    if elem in B:
        D.append(C[idx % len(C)])
        idx = idx + 1
    else:
        D.append('')

对应输出:

['', 'A', '', '', 'B']

查看演示 here

【讨论】:

  • 我只会为了安全而添加这个(不确定它是否是预期的行为):D.append(C[idx] % len(C))
  • 似乎在小提琴中不起作用,但我明白你的意思。我将确保它不会尝试在 if 语句的条件下从 C 中获取不存在的值。
  • 啊,咖啡不够……我是说:D.append(C[idx % len(C)])。您的修复将附加空字符串而不是循环。
  • 是的,这看起来正确而且绝对更优雅,谢谢!
猜你喜欢
  • 2012-08-01
  • 2021-04-14
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 2022-11-14
  • 2021-03-02
  • 2020-10-29
  • 1970-01-01
相关资源
最近更新 更多