|
1
a=['a','b','c','d']
n=7 c=0 while c < n: for b in a: print(b) c+=1 这样的为什么不行啊 不是 c <n 的调解不成立时候不再循环么? |
|
2
(l * (n // len(l) + 1))[:n]
|
|
hsj1992Oct 22, 2016
3
看完条件和结果,第一个反应是输出完一遍 list1 内容后再次输出 n-list1.length 次。
那样的话可以写递归吧? 基准情形就是 n<=list1.length 。 |
|
upczwwOct 22, 2016 via Smartisan T1
6
2 楼的方法很好
|
|
7
[list1[i%len(list1)] for i in range(n)]
|
|
8
```
import itertools n=7 list1=['a','b','c','d'] print list(itertools.islice(itertools.cycle(list1), 0, n)) ``` |
|
9
(list1 * 2)[:n]
|
|
sudozOct 22, 2016
10
@yangtukun1412 66666
|
|
KKKKKKOct 23, 2016 via Android
11
这不是循环模运算嘛!
|
|
lululauOct 23, 2016
12
4L, 8L 正解
引战:还是 Ruby 写起来舒心: lst.cycle.take(n) |
|
shylingOct 23, 2016
13
这种简单的方法肯定是从 list 构造一个 stream(cycle),然后 take 咯
|
|
kkzxak47Oct 23, 2016 via Android
14
import itertools
list(itertools.islice(itertools.cycle(list1), 0, n)) |
|
q397064399Oct 23, 2016
16
取余大法好,凡是这种要回头遍历的都是取余
|
|
liushuaikobeOct 23, 2016
17
(list1 * 2)[:n]
|
|
BingoXuanOct 23, 2016
18
import math
(list1 * math.ceil( n / len(list1) ) )[:7] 简化这个问题: 从一个重复 list1 的列表里面取出前 n 个元素; 确定重复的倍数,重复次数是 list1 元素数量的倍数; n / len(list1)再进一即可找到倍数,但由于存在小数的情况,所以调用 math.ceil ()进一取整; 和 2L 的方法差不多,只是多调用 math 的 ceil 函数。在 python 里面,个人觉得如果可以不写循环尽量不写循环。当需要调用的要素变多,编写循环就会更复杂。 |
|
wemoreOct 23, 2016 via Android
19
没学过 py , py 里没有取模运算符吗
|
|
jackisnotspirateOct 23, 2016
20
```
func takeOrCompensate<T>(n: Int, arr: [T], initial: Int = 0) -> [T] { if n <= 0 { return [] } if arr.count == 0 { return [] } return [arr[initial % arr.count]] + takeOrCompensate(n: n-1, arr: arr, initial: (initial + 1)) } print(takeOrCompensate(n: 7, arr: ["a", "b", "c", "d"])) ``` |
|
wnduanOct 24, 2016
21
|
|
22
wnduan 在 n=7 list1=['a','b','c','d'] 知道这两个结果如何输出结果 a b c d a b c ? 里回复了你 4 小时 49 分钟前 删除
@jin6220 前面已经各种正解了。如果要让你的代码得到期望的结果,在 for 循环里加个判断就行了,比如在 print() 前面来个 if c == n: break ============= 抱歉 准备回复您呢 点了回复却把你的回复隐藏了 也不知道如何再次显示。 嗯 这样一改 确实是简单多了。 a=['a','b','c','d'] n=7 c=0 while c < n: for b in a: if c==n: break print(b) c+=1 a b c d a b c >>> |
|
23
@wnduan 抱歉 准备回复您呢 点了回复却把你的回复隐藏了 也不知道如何再次显示。
嗯 这样一改 确实是简单多了。 a=['a','b','c','d'] n=7 c=0 while c < n: for b in a: if c==n: break print(b) c+=1 |
|
eoteOct 24, 2016
24
loop = lambda arr, n, result=[]:len(result) == n and result or loop(arr, n, result + [arr[(len(result)) % len(arr)]])
loop(list1, n) |
|
eoteOct 24, 2016
25
没看清题目,应该是
loop = lambda arr, n, result=[]:len(result) == n and ' '.join(result) or loop(arr, n, result + [arr[(len(result)) % len(arr)]]) |
|
yanzixuanOct 25, 2016
27
(list1*int(round(n*1.0/len(list1))))[:n]
|