【问题标题】:Using one list index as reference in a for loop在 for 循环中使用一个列表索引作为参考
【发布时间】:2020-10-06 12:27:20
【问题描述】:

我希望根据第三个列表 (ListA) 的布尔值将文本从一个列表 (ListC) 添加到另一个列表 (ListB)。所以 ListB 的所有元素都会得到一个加法,但它会根据 ListA 的索引而变化。仅当 ListA 中的索引为 True 时才会发生更改。

ListA = [True, False, True, False, False, False, True]

ListB = ['T1', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7']

ListC = ['s1', 's2', 's3']

预期的最终结果将是一个 listD(请参阅 List D 的第一个和第二个元素具有 s1 和 s2 仅在第三个元素上输入,因为 ListA 是 True、False、True):

ListD = ['s1 + T1', 's1 + T2', 's2 + T3', 's2 + T4', 's2 + T5', 's2 + T6', 's3 + T7']

想法是替换现有代码:

for i in range(0,2):
    ListD[i] = 's1' +  ListB[i]

for l in range (2,5):
    ListD[l] = 's2' + ListB[l]

for w in range(5,7):
    ListD[w] = 's3'+ ListB[w]

关于如何做到这一点的任何建议?

感谢您的帮助!

【问题讨论】:

  • 你确定输出,为什么 s1+T2 存在,即使列表 A 在第二个索引处有错误值?
  • 如果我理解正确的话,listA 中的任何 True 都意味着我们将添加值(在 ListB 上)更改为 listC 右侧的一个位置?
  • 看起来输入和输出结果不一致。可能最后一个 True 应该在 ListA 中,而不是在最后一个位置,而是在最后一个位置。
  • 我不明白获取listD 的逻辑。此外,您从未在代码中使用过listA,那么它是干什么用的?
  • ListA 是更改使用哪个 ListC 的触发器。只要 ListA 索引为 True,就会使用新的 ListC 元素。换句话说,ListA as False 不会改变 ListC 中要使用的元素。

标签: python


【解决方案1】:
In[115]: c = 0
In[116]: for i, flag in enumerate(ListA):
    ...:     ListD.append(ListC[c] + ' + ' + ListB[i])
    ...:     c += int(flag)
    ...:     
In[117]: ListD
Out[117]: ['s1 + T1', 's2 + T2', 's2 + T3', 's3 + T4', 's3 + T5', 's3 + T6', 's3 + T7']

但我没有看到您的示例考虑了第一个 True,这就是我的结果不同的原因

【讨论】:

  • 可能你应该从c = -1 开始并在追加之前执行c += ...。至少这样输出会更接近提问者的输出。
  • 是的,这将得到确切的结果。但在示例中似乎很奇怪,只有第二个 True 值会改变行为,所以这就是为什么我制作了每个 True 值都会产生影响的版本
  • 我希望在输入示例中最后一个 True 应该在 ListA 的最后一个位置。无论如何找出正确的算法示例输入/输出应该由提问者纠正。
  • 嗨@busfighter 不完全是我所期待的,因为 ListA 的第二个元素是 False,所以 ListD 的第二个元素应该有 st + T1。必须在 ListA 中的索引为 True 而不是为 false 时发生更改
  • ListA 值可以在附加到 ListD 之前或之后更改 ListC 成员。你的情况是什么?
【解决方案2】:

你可以使用:

cdx = -1
ListD=[]
for bdx, b in enumerate(ListB):
    cdx+=int(ListA[bdx])
    ListD.append(ListC[max(0, cdx)]+' + '+b)
    
ListD

哪些输出:

['s1 + T1', 's1 + T2', 's2 + T3', 's2 + T4', 's2 + T5', 's2 + T6', 's3 + T7']

虽然我不确定您如何处理列表中的第一个 True 以及如果在索引 0 处有一个 False 将是什么输出。假设您无论如何都想要列表中的第一个项目,此代码将起作用。如果您想对第一个 False 做一些不同的事情,可能需要进行一些更改

【讨论】:

    【解决方案3】:
    #!/usr/bin/env python3
    
    ListA = [True, False, True, False, False, False, True]
    ListB = ['T1', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7']
    ListC = ['s1', 's2', 's3']
    ListD = []
    
    count = 0
    for i in range(len(ListA)):
        if ListA[i]:
            ListD.append("{} + {}".format(ListC[count], ListB[i]))
        else:
            ListD.append("{} + {}".format(ListC[count], ListB[i]))
            if count < 2:
                count += 1 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 2012-04-03
      相关资源
      最近更新 更多