簡體   English   中英

Python如何為itertools.permutations打印屬性

[英]Python how to print attributes for itertools.permutations

我是Python的新手,正在嘗試itertools

import itertools as it
obj = it.permutations(range(4))
print(obj)
for perm in obj:
    print( perm )

我的問題:如何在不使用for循環的情況下直接查看/打印obj所有排列?

我嘗試過的事情:我嘗試按照此SO鏈接中的建議使用__dict__vars ,但兩者都不起作用(該對象似乎不存在前者,而后者生成的'TypeError:'itertools.permutations'對象不可調用')。

如果我的問題有點笨拙,請原諒-這個屬性問題看起來很復雜,用SO鏈接編寫的大部分內容都撲朔迷離。

只需將obj轉換為list

print(list(obj))

這將為您提供以下輸出:

[(0, 1, 2, 3), (0, 1, 3, 2), (0, 2, 1, 3), (0, 2, 3, 1), (0, 3, 1, 2), (0, 3, 2, 1), (1, 0, 2, 3), (1, 0, 3, 2), (1, 2, 0, 3), (1, 2, 3, 0), (1, 3, 0, 2), (1, 3, 2, 0), (2, 0, 1, 3), (2, 0, 3, 1), (2, 1, 0, 3), (2, 1, 3, 0), (2, 3, 0, 1), (2, 3, 1, 0), (3, 0, 1, 2), (3, 0, 2, 1), (3, 1, 0, 2), (3, 1, 2, 0), (3, 2, 0, 1), (3, 2, 1, 0)]

那是您問題的直接答案。 要弄清楚的另一件好事是您是否真的需要您所要的東西。

您會看到, permutations返回生成器是有原因的。 如果您不熟悉這種模式,強烈建議您閱讀一下。 長話短說,除非您確實需要將其作為list (例如,您想直接通過索引訪問項目),否則通常不需要將此類內容投射到list 在只需要打印排列的情況下,使用for循環絕對沒有錯。

這是一種單行打印每行一個排列的方法:

print('\n'.join(str(permutation) for permutation in obj))

但是同樣,您已經在使用簡單的for循環就可以了。 請記住, 簡單勝於復雜

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM