【问题标题】:Python Drop first occurrence of list Item from two listsPython从两个列表中删除第一次出现的列表项
【发布时间】:2018-07-02 11:32:07
【问题描述】:

我正在使用 python 制作一个带有骰子取消功能的骰子滚轮。我已经创建了骰子并将它们存储在一个列表中。 0 是第一组骰子,1 是第二组骰子。

{0: [4,2,3,2], 1: [2,3,6]}

python 脚本在两个列表中为每个唯一数字找到第一个匹配的数字,然后将它们从列表中删除。

结果后:

{0: [4,2], 1: [6]}

我似乎找不到正确的方法来实现这一点。我已经研究过itertoolsfind_first,但我想不出办法让它发挥作用。

有人有什么建议吗?

【问题讨论】:

  • 那好像是字典,不是列表
  • “第一”,怎么定义的?按照它在第一个列表中出现的顺序?在第二个?
  • @Roberto 最好要求澄清而不是假设事情。
  • 如果您能提供有关如何从 [4,2,3,2] 和 [2,3,6] 到 [4,2] 的分步说明,那就太好了] 和 [6]。我也没有得到规则。
  • @user3483203:谢谢,是的,字典对不起。我对 python 相当陌生,所以我的术语可能有点偏离。 ;) github.com/mschippr/EoTWDice/blob/master/roll.py

标签: python python-3.x


【解决方案1】:

试试看:

dct = {0: [4, 2, 3, 2], 1: [2, 3, 6]}
new_dct = dct[0].copy()
for i in new_dct:
    if i in dct[1]:
        dct[0].remove(i)
        dct[1].remove(i)
print(dct)

更新:

如果你需要你可以改变

new_dct = dct[0].copy()
for i in new_dct:

for i in dct[0][:]:

【讨论】:

  • 是的,它给出了我所追求的正确输出。感谢您的帮助。
  • 很高兴为您提供帮助@MarkSchipper :)
【解决方案2】:

我认为这会对你有所帮助:

l0_ = [4,2,3,2]
l0 = list(l0_) # this is needed to make a deep copy of l0_
l1 = [2,3,6]
for i in l0_:
    if i in l1:
        l0.remove(i)
        l1.remove(i)
res = {0:l0, 1:l1}
res

如果你不想考虑重复,你可以先将列表转换成集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-25
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    相关资源
    最近更新 更多