我想在Python中打印一个二维列表,但不带逗号。
不要打印下面这样带逗号的格式:
[[0,0,0,0,0,1,1,1,1,1,1],[0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,0,1],[1,1,1] ... ]
我想打印。
[[0 0 0 0 0 1 1 1 1 1 1 1] [0 0 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 1 1 0 1] [1 1 1] ... ]
任何关于我应该如何做相同事情的见解?
谢谢!
简单易懂:只需使用repr
将逗号转换为空格并转换为字符串即可。
def repr_with_spaces(lst):
return repr(lst).replace(",", " ")
这里有一个通用的解决方案。使用指定的分隔符,以及指定的左右括号字符,将一个序列转换为一个字符串。
lst = [[0,0,0,0,0,1,1,1,1,1,1],[0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,1,1,0,1],[1,1,1]]
import sys
if sys.version_info[0] >= 3:
basestring = str
try:
from collections.abc import Iterable
except ImportError:
from collections import Iterable
def str_seq(seq, sep=' ', s_left='[', s_right=']'):
if isinstance(seq, basestring):
return seq
if isinstance(seq, Iterable):
s = sep.join(str_seq(x, sep, s_left, s_right) for x in seq)
return s_left + s + s_right
else:
return str(seq)
print(str_seq(lst))
为什么代码要进行 isinstance(seq, basestr)
检查?这就是原因:
isinstance(seq, collections.abc.Iterable)
而不是 try/except。 - ecatmurcollections.abc.Iterable
,但我看到了collections.Iterable
...当我检查时,isinstance(x, collections.Iterable)
成功了,其中x
是一个列表、迭代器或生成器。只要你不需要使用那些不从适当的Python基本类型继承的自定义类,isinstance()
检查就可以工作,并且应该会更快。 - stevehacollections.abc.Iterable
比 Python 2.x 中的 collections.Iterable
更智能?在 Python 2.x 中,是否有可能通过自定义类来欺骗上述代码,该类仅继承自 object
并定义其自己的方法以使其可迭代? - stevehacollections.Iterable
和其他抽象基类在collections
中。我最初编写的代码适用于Python 2.5及更早版本,但对于Python 2.6及更高版本,我更喜欢这种方式。任何对抽象基类感兴趣的人都应该阅读PEP:http://www.python.org/dev/peps/pep-3119/ - stevehatry
/except
会起作用。在 Python 中,如果你在类中实现了 .__getitem__()
,即使你没有实现 .__iter__()
,它也是可迭代的。我认为我更喜欢 Iterable
测试;如果你想让你的类可迭代,你应该实现 .__iter__()
。这里有一个很棒的讨论:https://dev59.com/dXNA5IYBdhLWcg3whuV_ - stevehadef my_repr(o):
if isinstance(o, list):
return '[' + ' '.join(my_repr(x) for x in o) + ']'
else:
return repr(o)
list_repr
使用基本上是这个算法(使用_PyString_Join
函数)。list
的类列表对象。我猜问题只是关于list
的,但在Python中解决这个通用问题很容易;请看我的回答。 - stevehayour_string.replace(',',' ')
' '.join(your_string.split(','))
好的,作为一个应用于变量“a”中数组的一行代码:
print "[" + ' '.join(map(lambda row: "[" + ' '.join(map(str, row)) + "] ", a)) + "]"
str.join()
方法:lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
def format_list(items):
list_contents = ' '.join(str(it) for it in items) # convert contents to string too
return '[{}]'.format(list_contents) # wrap in brackets
formatted = format_list(format_list(l) for l in lists)
ideone 示例:http://ideone.com/g1VdE
是
str([1,2],[3,4]).replace(","," ")
你想要什么?