条件语句在具有多个iterable的python列表理解中的定位

2024-04-27 10:22:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难理解为什么一个相同的条件语句在一个包含多个iterable的列表中的位置会影响结果。在

>>> boys = 'Jim','Jeff'
>>> girls = 'Bonnie', 'Buffy'

# This generates four tuples as expected
>>> [(b,g) for b in boys for g in girls]
[('Jim', 'Bonnie'), ('Jim', 'Buffy'), ('Jeff', 'Bonnie'), ('Jeff', 'Buffy')]

# If the conditional "if b[-1] not in g" is at the end of the LC we get 3
>>> [(b,g) for b in boys for g in girls if b[-1] not in g]
[('Jim', 'Bonnie'), ('Jim', 'Buffy'), ('Jeff', 'Bonnie')]

# If the conditional is after the first sequence, we only get two results
>>> [(b,g) for b in boys if b[-1] not in g for g in girls]
[('Jim', 'Bonnie'), ('Jim', 'Buffy')]

如果其他人已经在StackOverflow上提出/回答了此问题,请提前致歉。在


Tags: theinforifisnotweconditional
1条回答
网友
1楼 · 发布于 2024-04-27 10:22:22

你所做的与:

>>> boys = 'Jim','Jeff'
>>> girls = 'Bonnie', 'Buffy'
>>>
>>> out = []
>>> for b in boys:
...    for g in girls:
...       out.append((b,g))
...
>>> out
[('Jim', 'Bonnie'), ('Jim', 'Buffy'), ('Jeff', 'Bonnie'), ('Jeff', 'Buffy')]
>>>
>>> out = []
>>> for b in boys:
...    for g in girls:
...        if b[-1] not in g:
...            out.append((b,g))
...
>>> out
[('Jim', 'Bonnie'), ('Jim', 'Buffy'), ('Jeff', 'Bonnie')]
>>>
>>> b
'Jeff'
>>> g
'Buffy'
>>> out = []
>>> for b in boys:
...     if b[-1] not in g:
...         for g in girls:
...            out.append((b,g))
...
>>> out
[('Jim', 'Bonnie'), ('Jim', 'Buffy')]

由于bg已经定义并填充了上一次运行的值,因此会发生以下情况:

  • 第一个外循环Jim
    • m在{}中?否-运行内环:
    • 追加(Jim, Bonnie)
    • 追加(Jim, Buffy)
  • 第二个外循环Jeff
    • fBuffy中?是-跳过内循环。在

如果您首先在一个新的Python shell中运行它,它将引发一个Exception

^{pr2}$

相关问题 更多 >