19

我通过使用从 sql 查询中检索数据

bounds = cursor.fetchone()

我得到一个像这样的元组:

(34.2424, -64.2344, 76.3534, 45.2344)

我想要一个像这样的字符串34.2424 -64.2344 76.3534 45.2344

是否存在可以做到这一点的功能?

4

6 回答 6

39

使用str.join()

>>> mystring = ' '.join(map(str, (34.2424, -64.2344, 76.3534, 45.2344)))
>>> print mystring
34.2424 -64.2344 76.3534 45.2344

您必须在此处使用 map (它将元组中的所有项目转换为字符串),否则您将得到一个TypeError.


关于map()函数的一点说明:

map(str, (34.2424, -64.2344, 76.3534, 45.2344)相当于[str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344)]

它比使用列表推导要快一点:

$ python -m timeit "map(str, (34.2424, -64.2344, 76.3534, 45.2344))"
1000000 loops, best of 3: 1.93 usec per loop
$ python -m timeit "[str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344)]"
100000 loops, best of 3: 2.02 usec per loop

如对此答案的评论所示,str.join()可以使用生成器而不是列表。通常,这会更快,但在这种情况下,它会更慢

如果我这样做:

' '.join(itertools.imap(str, (34.2424, -64.2344, 76.3534, 45.2344)))

它会比使用map(). 不同之处在于imap()返回一个生成器,而map()返回一个列表(在 python 3 中它返回一个生成器)

如果我这样做:

''.join(str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344))

由于此处解释的原因,它会比在列表理解周围加上括号要慢。


在您(OP)的情况下,任何一个选项都无关紧要,因为这里的性能似乎没什么大不了的。但是,如果您曾经处理过大量的浮点数/整数元组,那么现在您知道使用什么来获得最大效率:)。

于 2013-07-02T13:04:20.443 回答
6

如果您愿意使用魔法,您也可以使用它str.format()来生成任意格式。*处理这个问题的具体情况,用一个分隔符,其实有点麻烦:

>>> bounds = (34.2424, -64.2344, 76.3534, 45.2344)
>>> "{} {} {} {}".format(*bounds)

34.2424 -64.2344 76.3534 45.2344

一个更健壮的版本可以处理任何长度,比如join,是:

>>> len(bounds)*"{} ".format(*bounds)

但增加的价值是,如果您想将格式扩展到更多涉及的内容,您可以选择:

>>> "{} --> | {:>10} | {:>10} | {:>10} |".format(*bounds)

34.2424 --> |   -64.2344 |    76.3534 |    45.2344 |

从这里开始,您的字符串格式化选项非常多样化。

于 2015-03-21T05:14:27.300 回答
5

如果我收到您的消息,您会收到浮点数的元组,对吗?

如果是这样,以下代码应该可以工作:

In [1]: t = (34.2424 , -64.2344 , 76.3534 , 45.2344)

In [2]: ' '.join([str(x) for x in t])
Out[2]: '34.2424 -64.2344 76.3534 45.2344'

我们在这里将元组中的每个值都转换为字符串,因为str.join方法只能用于字符串列表。如果t是字符串元组,则代码将为' '.join(t).

如果你得到 string 格式"(34.2424 , -64.2344 , 76.3534 , 45.2344)",你应该首先去掉不必要的 parthensis 和逗号:

In [3]: t = "(34.2424 , -64.2344 , 76.3534 , 45.2344)"

In [4]: t.strip('()')
Out[4]: '34.2424 , -64.2344 , 76.3534 , 45.2344'

In [5]: numbers = t.strip('()')

In [6]: numbers.split(' , ')
Out[6]: ['34.2424', '-64.2344', '76.3534', '45.2344']

In [7]: ' '.join(numbers.split(' , '))
Out[7]: '34.2424 -64.2344 76.3534 45.2344'
于 2013-07-02T13:11:45.687 回答
3

尝试这个

>>> a = (34.2424, -64.2344, 76.3534, 45.2344)
>>> ' '.join(str(i) for i in a)
'34.2424 -64.2344 76.3534 45.2344
于 2013-07-02T13:06:24.703 回答
0
rows = cursor.fetchall()

for row in rows:#iterate over entire rows
    print('row : 'row)#prints the entire row
    for d in row:#prints each item of the row
        print(d)

输出:

row :  (34.2424, -64.2344, 76.3534, 45.2344)
34.2424
-64.2344
76.3534
45.2344
于 2022-01-18T11:31:38.117 回答
-1

您可以简单地使用以下代码:

i = 0
for row in data:
       print(row[i])
       i++
于 2018-01-13T03:13:16.523 回答