获取多个字符串和元组列表的函数

时间:2012-12-01 13:55:38

标签: python

所以,我想创建一个函数,它接受多个字符串和元组的列表,它的作用是,如果它是一个字符串,它只打印字符串,但如果它是一个元组,则元组取整数并且一个字符串,它将它们相乘。

示例:

print(something(["1stString", "2ndString", (3, "Pie"), (4, "Soda")]))

并打印:

1stString
2ndString
Pie
Pie
Pie
Soda
Soda
Soda
Soda

我悲惨的尝试:

def something(s):
    for x in s:
        if isinstance(s, str):
            print(s)
        if isinstance(s, tuple):
            x = tuple[0] * tuple[1]
        print(x)
    exit()

这适用于字符串,但不适用于元组。

打印出来:

1stString
2ndString
(3, 'Pie')
(4, 'Soda')

我做错了什么?

还有一件事。 如果我想将它作为列表打印出来怎么样?

像这样:

['1stString', '2ndString', 'Pie', 'Pie', 'Pie', 'Soda', 'Soda', 'Soda', 'Soda']

4 个答案:

答案 0 :(得分:2)

正如NPE所说,你正在检查的不是x。 s是元素的完整列表,而x是s的当前元素的占位符。

def something(s):
    for x in s:
        if isinstance(x, str):
            print(x)
        if isinstance(x, tuple):
            for i in range(x[0]):
                print x[1]

答案 1 :(得分:1)

一个问题是,您正在s中检查x而不是isinstance

isinstance(s, ...

我还应该指出,这种编程风格非常非Pythonic。也许如果你解释了为什么要这样做,我们或许可以改进这种方法。

答案 2 :(得分:1)

Python 3.2:

    def something(s):
            for i in s:
               if isinstance(i,str):
                    print(i)
            else:
                print(i[0]*i[1])

它会打印

    1stString
    2ndString
    PiePiePie
    SodaSodaSodaSoda

答案 3 :(得分:0)

我会使用生成器函数:

def yielder(sequ):
    for E in sequ:
        if isinstance(E,str):
            yield E
        else:
            ss = E[1]
            for i in xrange(E[0]):
                yield ss

li = ["1stString", "2ndString", (3, "Pie"), (4, "Soda")]

print li
print '----------------------------'
print list(yielder(li))
print '----------------------------'
print '\n'.join(yielder(li))

结果

['1stString', '2ndString', (3, 'Pie'), (4, 'Soda')]
----------------------------
['1stString', '2ndString', 'Pie', 'Pie', 'Pie', 'Soda', 'Soda', 'Soda', 'Soda']
----------------------------
1stString
2ndString
Pie
Pie
Pie
Soda
Soda
Soda
Soda