【问题标题】:How to extract strings from Python tuples or lists?如何从 Python 元组或列表中提取字符串?
【发布时间】:2019-09-13 04:27:21
【问题描述】:

我不明白为什么它不起作用,但我是编程新手,所以我可能会犯一些简单的错误。

def tuplasemstr(t):
    tup1 = []
    n = 0
    while n <= 2 and type(t[n],) != str:
        list.append(tup1, t[n])
        n = n + 1

    return tuple(tup1)

我期待的是这样的:

t = ("a",3,2.1)

输出:

(3,2.1)

【问题讨论】:

  • 顺便说一句,你真的不应该在这里使用while循环。请注意,while n &lt;= 2 and type(t[n],) != str: 将在您第一次遇到字符串时终止。

标签: python python-3.x list while-loop tuples


【解决方案1】:

@blhsing 给出的解决方案是最好的。但是如果你想让你的代码工作,你可以这样做:

def tuplasemstr(t):
    tup1 = []
    n = 0
    while n < len(t):
        if not isinstance(t[n], str):
            list.append(tup1, t[n])
        n = n + 1
    return tuple(tup1)

t = ('a', 3, 2.1, 'c', 32)
print(tuplasemstr(t)) # (3, 2.1, 32)

要检查字符串,您应该在 while 循环中使用 isinstance。另外,不要使用n &lt;= 2 对长度进行硬编码,而是使用n &lt; len(t)。

【讨论】:

  • 你的函数没有按照你期望的方式运行的原因是你在进入while循环的同时检查了类型。在您的特定情况下,您会得到一个空元组,因为您的 while 循环永远不会执行。以@David Robles 的方式进行操作表明您将添加任意数量的 not 与 str 类型匹配的项目,这确实比硬编码数字更好因为它适用于您的元组中的任意数量的项目。
  • 谢谢!长度“2”实际上是练习给出的限制。
【解决方案2】:

如果您要过滤掉元组中的字符串项目,您可以使用带有条件的生成器表达式来测试项目是否不是字符串的实例:

def tuplasemstr(t):
    return tuple(i for i in t if not isinstance(i, str))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多