【问题标题】:Change Boolean Value Python 3更改布尔值 Python 3
【发布时间】:2013-11-13 05:28:02
【问题描述】:

我正在尝试编写一个采用布尔值并将其交换为列表中相反值的代码。因此,假设我从 100 个 False 开始,并希望将每一个都更改为 True。然后,我想从第二个开始,每隔一个更改一次。我希望这是有道理的。

一个例子是:

>>>False False False False False False False False False False
>>>True True True True True True True True True True
>>>True False True False True False True False True False
>>>True False False False True True True False False True 

【问题讨论】:

  • 第三个得到第四个做了什么操作? (True False False False True True True True False True)
  • 对不起,我搞砸了
  • @WhooCares,现在它会更改索引为 2、5、8、9..(第 3、第 6、第 9、第 10)的项目。我仍然不明白应用了什么更改规则。

标签: python-3.x boolean


【解决方案1】:

使用列表理解和切片:

>>> lst = [False] * 10
>>> lst
[False, False, False, False, False, False, False, False, False, False]
>>> lst[:] = [not x for x in lst]
>>> lst
[True, True, True, True, True, True, True, True, True, True]
>>> lst[1::2] = [not x for x in lst[1::2]]
>>> lst
[True, False, True, False, True, False, True, False, True, False]

【讨论】:

  • 如何处理大量数据?说100?还是100?
  • @WhooCares,此代码无需修改即可工作。 (除了第一个lst = [False] * 10
  • @WhooCares,如果真的很大,可以用生成表达式代替列表推导:lst[1::2] = (not x for x in lst[1::2])
  • 哦,明白了!非常感谢!
【解决方案2】:

将所有其他元素切换到相反的位置:

my_list = [False, False, False, False, False, False, False]
for index in range(0, len(my_list), 2):
    my_list[index] = not my_list[index]

【讨论】:

  • 已修复 - 将 list[index] 重命名为 my_list[index]。
  • 使用range(0, len(my_list), 2),不需要使用if
猜你喜欢
  • 2014-01-06
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 2012-12-30
  • 2012-08-01
  • 2011-10-30
  • 1970-01-01
相关资源
最近更新 更多