【问题标题】:Python transposing a row list to a column listPython将行列表转换为列列表
【发布时间】:2018-01-17 00:08:24
【问题描述】:

对 python 比较陌生,我有一个似乎无法轻松解决(或完全理解)的问题 运行以下代码:

(" ".join(map(str,np.int32(((np.arange(14))))))).split()

产生以下内容:

Out[54]: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13']

(" ".join(map(str,np.int32(((np.arange(15))))))).split()

产生以下

Out[2]: 
['0',
 '1',
 '2',
 '3',
 '4',
 '5',
 '6',
 '7',
 '8',
 '9',
 '10',
 '11',
 '12',
 '13',
 '14']

我希望能够使用少于 15 个数字的列而不是行的形式创建一个列表。

在这方面有人可以提供帮助吗?

原因是 QtWidgets.QCombobox.additems('list of strings') 在 14 但不是 15(或更大)的情况下会追逐控制台/内核。

(在 windows 7 上使用 spyder 3.6 / ipython 3.6.2 / anaconda (4.4, 64bit) / pyqt 5.6.2)

编辑 1: 非常感谢您的回复.. 但是.. map(str, np.int32(np.arange(14))) 产生 Out[4]: <map at 0xba4f2b0>

突然之间,列表中的项目少于 15 个。 pyqt/QCombobox 的问题似乎越来越像一些随机错误(当组合框太多时......可能是另一个问题。

【问题讨论】:

  • 两个列表具有相同的“形式”,只是 IPython 在一行中显示的内容不同。
  • 在 Python 3.x 中,map 返回一个映射对象,而不是一个序列,除非具体化...改用简单而明确的列表理解(不需要 numpy,加入然后拆分回字符串等...),例如:items = [str(i) for i in range(14)] 并将其传递给您的组合框
  • “突然之间,列表中的项目少于 15 个。”也许您更改了代码中的某些内容。如果没有一个最小的例子,我们永远不会知道 PyQt 中是否存在错误,或者您是否不小心修复了程序中的错误以及如何修复。这使得这个问题对其他人不是很有用。
  • @JonClements。 FWIW,QCombobox.additems 适用于任何类型的可迭代对象,包括 map 对象。我尝试了问题中显示的所有示例,它们对我来说都很好。似乎是PEBKAC的经典案例。

标签: python list numpy pyqt ipython


【解决方案1】:

首先,你可以去掉很多括号。你可以写:

(" ".join(map(str,np.int32(((np.arange(14))))))).split()

作为

(" ".join(map(str, np.int32(np.arange(14))))).split()

" ".join().split() 正好相反,所以你也可以删除它们而没有效果。

map(str, np.int32(np.arange(14))

您看到的不同之处在于,15 个数字的列表显示为行,而 14 个数字的列表显示为列。在内部,没有区别。 当您想在新行中显示每个数字时,只需使用换行符连接数字即可:

"\n".join(map(str, np.int32(np.arange(14)))

如果你坚持使用冒号和括号,你可以这样做:

print("[%s]" % ",\n ".join(map(str, np.int32(np.arange(14)))))

【讨论】:

  • 其实——numpy的使用和join和split的东西都可以去...items = [str(i) for i in range(14)]应该足够了
  • 或者,如果你从一个 numpy 数组开始,list(np.arange(14).astype(str))
猜你喜欢
  • 2022-11-23
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 2019-04-23
  • 2019-01-23
相关资源
最近更新 更多