Python 将%格式更改为f字符串

Python 将%格式更改为f字符串,python,python-3.x,f-string,Python,Python 3.x,F String,因此,我尝试删除这些%s%s,而改为使用f字符串格式。有没有人能展示一下这是怎么做到的。谢谢 colors = ['black', 'white'] sizes = ['S', 'M', 'L'] for tshirt in ('%s %s' % (c, s) for c in colors for s in sizes): print(tshirt) black S black M black L white S white M white L 另一种方法是使用itertools.

因此,我尝试删除这些%s%s,而改为使用f字符串格式。有没有人能展示一下这是怎么做到的。谢谢

colors = ['black', 'white']
sizes = ['S', 'M', 'L']
for tshirt in ('%s %s' % (c, s) for c in colors for s in sizes):
    print(tshirt)

black S
black M
black L
white S
white M
white L
另一种方法是使用
itertools.product

>>> colors = ['black', 'white']
>>> sizes = ['S', 'M', 'L']
>>> for c in colors:
...    for s in sizes:
...        print(f'{c} {s}')

您可以将变量名写在花括号中(
{…}
):

对于tshirt in(f'{c}{s}'对于c in颜色对于s in尺寸):
印花(T恤)

尽管在这种情况下,为
for
循环使用生成器有点奇怪:您可以将其展开为(两)个嵌套的
for
循环,如@nosklo的回答中所示(虽然这当然不会改变的用法。

我同意生成器在这里很混乱,增加了复杂性,但没有任何好处-事实上,它可能比普通循环占用更多内存。出于这个原因,我在回答中加入了普通循环。不过,最好先说明如何仅对他们要求,然后解释为什么以及如何改进,而不是暗示需要重写所有内容才能更改OP,而事实并非如此。非常感谢大家。我可以知道为什么你们发现它更复杂、更消耗内存。它不是比for循环更紧凑、更容易吗?对不起,我还是新手o这个,所以我不知道大o和时间的复杂性。@Damon不会有大o的差异,但空间中会有一个额外的常数项(生成器状态不是很大,但它不是自由的),时间中会有一个额外的常数因子(它有效地完成了完全相同的两个循环,加上每个元素通过
收益率的成本).@Damon理解,尤其是生成器表达式,在您希望存储或传递迭代器以在以后进行迭代,或通过类似于
zip
的函数或
itertools
中的某些内容(将在C中进行迭代)时非常有用,但它们仅在一些不常见的特殊情况下,作为
for
语句中的iterable表达式(或另一种理解中的iterable)有用。
>>> for c, s in itertools.product(colors, sizes):
...     print(f'{c} {s}')   
for tshirt in (f'{c} {s}' for c in colors for s in sizes):
    print(tshirt)