【问题标题】:Returning True if all elements in a user’s list are a list如果用户列表中的所有元素都是列表,则返回 True
【发布时间】:2019-07-25 23:56:47
【问题描述】:

已解决

我的练习是编写一个名为 list_check 的函数,它接受来自用户的列表,如果用户列表中的每个元素本身也是一个列表,则返回 True。

最重要的是,我希望看到一个使用用户输入解决此问题的工作示例,这比您自己提供列表更困难。

这是我接受用户输入列表最接近的一次:

userlist = []
number_of_elements = int(input("Enter the number of elements in your list: "))

for i in range(0, number_of_elements):
    element = input().split()
    userlist.append(element)

if all(isinstance(element, list) for element in userlist):
    print("True")
else:
    print("False")

没有用户输入的工作代码如下:

customlist = [[1,2,3],[2,3,4], False]

def list_check(customlist):
    answer = all(type(l) == list for l in customlist)
    print(answer)

list_check(customlist)

错误

感谢您的帮助。 - J

【问题讨论】:

  • input() 将始终返回一个字符串。所以你有一个列表的字符串表示,而不是一个列表,即"[1, 2, 3]"
  • 你可以改成element = input().split()
  • 我对代码的最后一部分仍然有问题。我将其更改为 if 语句: if all(isinstance(element, list) for element in userlist): print(True) else: print(False)
  • 我发布了一个答案,但你为什么要打印字符串 True 和 False 而不是布尔值?我不确定你是否知道这一点,但是 range(0, t) == range(t)。 0 是默认的起始整数。
  • 你应该写一个函数,一个列表作为参数,一个布尔值作为返回值。您不应该将键盘输入或打印到控制台。

标签: python python-3.x list isinstance


【解决方案1】:
def listcheck():
    y = (input("Enter your lists: \n"))
    if y[0] !="[" or y[1] !="[":
        print("false, you entered data not starting with [[")
        return False
    if y[len(y)-1] !="]" or y[len(y)-2] !="]":
        print("false, you entered data not ending with ]]")
        return False
    import ast
    z = ast.literal_eval(y)
    def innerlistcheck(alist):
        for x in range(0, len(alist), 1):
            if type(alist[x]) != list:
                print("false, " + str(alist[x]) + " is not a list")
                return False
        print("true")
        return True
    innerlistcheck(z)

listcheck()

我认为这可能是您问题的答案。 最困难的部分是查看如何将字符串转换为我从这里窃取的列表:Convert string representation of list to list

【讨论】:

  • 我的回答是调用时要求用户输入的函数。正如塞尔丘克帮助我意识到的那样,输入是一个字符串。在将输入转换为列表之前,我检查它是否以“[[”开头并以“]]”结尾,因为每个列表列表都应该具有这种格式。
  • 绝对是朝着正确方向迈出的一步。我不会说这个解决方案是完美的,因为我使用以下输入对其进行了测试: [[2,3,4],[5,3,2],True] 以及 [[2, 3,4],[5,3,2],True]] ,并且都收到错误。感谢您的代码,尽管我会对其进行调整。同时,我将保持线程打开。
  • [[2,3,4],[5,3,2],True]] 语法不好,因为它有一个额外的“]”。
  • [[2,3,4],[5,3,2],True] 应该打印“false,您输入的数据不以 ]] 结尾”并返回 False ?运行时遇到什么错误?
  • 我很困惑,因为错误是在谈论括号而不是非列表数据类型。我想这在技术上是正确的。我可以调整错误的措辞。谢谢!
【解决方案2】:

那是因为 .split() 总是会返回一个列表。 'dog'.split() == ['dog']。

解决方案(优化)

number_of_elements = int(input("Enter the number of elements in your list: "))

output = True
for _ in range(number_of_elements):
    element = input().split()
    if len(element) == 1: output = False

print(output)

【讨论】:

    猜你喜欢
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 2021-07-20
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    相关资源
    最近更新 更多