【问题标题】:Split array into smaller arrays using few conditions使用很少的条件将数组拆分为更小的数组
【发布时间】:2012-03-04 10:32:50
【问题描述】:

任务是加载一个文件,其中包含一些具有不同答案数量的问题,并且列出的第一个答案总是正确的

例如:

Who is Jane?
Girl
Boy
Both
Why are we here?
Because
For fun

所以我想我会将行读入一个数组,但最后我需要能够随机播放每个问题的答案(并以某种方式跟踪正确的答案),然后再随机播放问题。

因此,如果我将这些行读入数组,它将如下所示:

a = ['Who is Jane?', 'Girl', 'Boy', 'Both', 'Why are we here?', 'Because', 'For fun']

现在我认为对于我必须做的事情,最好将数组拆分为更小的数组,其中始终包含问题及其所有答案。 所以我会有类似的东西

test = [['Who is Jane?', 'Girl', 'Boy', 'Both'], ['Why are we here?', 'Because', 'For fun']]

任何人都知道我该怎么做? 我知道要访问问号,您可以使用a[0][-1],这会给您来自'Who is Jane' 的问号。

【问题讨论】:

  • 这是作业吗?你试过什么了?我们将帮助您解决具体问题,但我们不会为您完成工作。第一步是从文件中读取文本,解释为in this question。总的来说,Python 文档和教程非常好,它解释了how to iterate over lists
  • 这是家庭作业的一部分..但我浏览了列表文档..也许我没有正确理解它..我知道如何洗牌和其他一切..我只是可以' t 弄清楚如何将数组列表划分为列表,其中列表始终包含一个问题及其答案
  • 顺便说一句,我现在只有一个月的 python.. 课程每周两次.. 我以前从未编程过.. 所以我明白你在说什么 Felix,但我认为它更有用查看代码并尝试理解它,然后根据你写的内容自己想出它,因为在没有建议的情况下,我在 python 中无能为力
  • 那你一定要看完教程:docs.python.org/tutorial/index.html 很好:)

标签: python list split


【解决方案1】:

这是我的实现,也许你的更好。

>>> a = ['Who is Jane?', 'Girl', 'Boy', 'Both', 'Why are we here?', 'Because', 'For fun']
>>>
>>> def fun(x):
...   y = []
...   for i in x:
...     if i.endswith('?') and y:
...       yield y
...       y = []
...     y.append(i)
...   else:
...     yield y
...
>>> list(fun(a))
[['Who is Jane?', 'Girl', 'Boy', 'Both'], ['Why are we here?', 'Because', 'For fun']]

【讨论】:

  • Kev,这个词是“实施”。但是你不应该为人们做功课。引导他们解决问题并自学。
  • 这是 gr8 现在我必须意识到这个功能是如何工作的,然后我应该能够实现它:) thx a lot man..
【解决方案2】:

这里是一种可能的算法的概要,假设lines 包含文本文件中的行并且它们已经过适当的预处理:

result = []
group = [lines[0]]

for line in <lines from the second element to the last>:
    if <line ends with a question mark>:
        # append group to result
        # reset group to an empty list

    # append line to group

这个想法只是简单地遍历行列表,每当遇到问题时创建一个新列表并将之前的列表附加到整体结果中。


根据您所学习的课程,提高您解决问题的能力(例如找到上述算法)比完美地学习 Python(或任何语言)更重要。

【讨论】:

  • 是的,你是对的,但就像我说的那样,我只使用 python 一段时间。在我发布问题之前,我知道导入部分是下一个问题,我可以通过最后的问号找到它。我可能应该使用一些循环,以便为每个问题完成。我只是不知道怎么做..我在此之前所做的分配是创建长度为 N 的所有可能组合,其中每个位置都可以是 1 或 0.. 所以如果用户键入例如 3,则程序显示列表 8 000,001 等组合
猜你喜欢
  • 2017-12-11
  • 1970-01-01
  • 2022-07-07
  • 2022-12-02
  • 1970-01-01
  • 2021-01-27
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多