据我所知,Python有3种方法可以找出正在运行的操作系统:
os.name
sys.platform
platform.system()
了解此信息通常在条件导入中使用,或者使用不同平台之间的功能(例如,time.clock()
在Windows上与time.time()
UNIX上).
我的问题是,为什么有3种不同的方法呢?何时应该使用一种方式而不是另一种方式?哪种方式是"最佳"(大多数面向未来或最不可能意外地排除您的程序实际可以运行的特定系统)?
看起来sys.platform
是不是更具体的os.name
,可以让你区分win32
从cygwin
(而不是只nt
),并linux2
从darwin
(而不是只posix
).但如果是这样的话,那么sys.platform
和之间的区别platform.system()
呢?
例如,哪个更好,这个:
import sys
if sys.platform == 'linux2':
# Do Linux-specific stuff
Run Code Online (Sandbox Code Playgroud)
或这个?:
import platform
if platform.system() == 'Linux':
# Do Linux-specific stuff
Run Code Online (Sandbox Code Playgroud)
现在我会坚持sys.platform
,所以这个问题并不是特别紧迫,但我非常感谢对此有所澄清.
只是想知道在Python中生成列表的所有循环移位的最有效方法是什么.在任何一个方向.例如,给定一个列表[1, 2, 3, 4]
,我想生成:
[[1, 2, 3, 4],
[4, 1, 2, 3],
[3, 4, 1, 2],
[2, 3, 4, 1]]
Run Code Online (Sandbox Code Playgroud)
通过将最后一个元素移动到前面来生成下一个排列,或者:
[[1, 2, 3, 4],
[2, 3, 4, 1],
[3, 4, 1, 2],
[4, 1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)
通过将第一个元素移动到后面来生成下一个排列.
第二种情况对我来说稍微有些意思,因为它导致拉丁方形减少(第一种情况也给出拉丁方,只是没有减少),这正是我试图用来做实验块设计的.它实际上与第一种情况没有什么不同,因为它们只是彼此重新排序,但顺序仍然很重要.
我对第一种情况的当前实施是:
def gen_latin_square(mylist):
tmplist = mylist[:]
latin_square = []
for i in range(len(mylist)):
latin_square.append(tmplist[:])
tmplist = [tmplist.pop()] + tmplist
return latin_square
Run Code Online (Sandbox Code Playgroud)
对于第二种情况,它:
def gen_latin_square(mylist):
tmplist = mylist[:]
latin_square = []
for i in range(len(mylist)):
latin_square.append(tmplist[:])
tmplist = tmplist[1:] + …
Run Code Online (Sandbox Code Playgroud)