-2

我有一个非常简单的想法,但不完全知道如何去做。我有两个不同长度的列表(比如说一个有 50 个,另一个有 200 个)。

所以

len(x) = 50
len(y) = 200

我想要做的是打印出一些行,其中 x 的一个值对应于 y 的多个值(如果数字重复则无关紧要)。

I.e. suppose x = [1,2,3,4]
y = [7,8,9,10,11,12,13,14,15,16,17]

I want to print out:
1: 7
1: 8
1: 9
1: 10
2: 11
2: 12
2: 13
3: 14
3: 15
3: 16
4: 17

y 值的随机化并不重要。对于 x 的每个值,打印出多少个多个值都没有关系。我基本上是在尝试编写一个将多个元素从一个表插入另一个表并使用 python 编写脚本的 sql 脚本。

我知道这可以通过简单地迭代最小列表并拥有多个 f.write() 语句来完成,同时增加一些变量以使多个 y 值与单个 x 值相关联。但这并没有涵盖 y 的所有值,而且看起来有点傻。有没有更好的方法来做到这一点?

编辑:对于我如何提出键与值的关联的问题,1 个键与多少个值关联(存在 8 的上限)并不重要。只能有 1 个值或多个(最多 8 个)。再说一次,键之间可能存在重复值(即在我的示例中没有,但键 4 也可以说具有值 7/8)

4

2 回答 2

0

试试这个 Python 解决方案:

>>> x = [1,2,3,4]
>>> y = [7,8,9,10,11,12,13,14,15,16,17]
>>> lnx, lny = len(x), len(y)
>>> groupatleast = (lny + lnx - 1) // lnx
>>> x2y = {}
>>> for i in range(lnx):
    x2y[x[i]] = y[i*groupatleast: (i+1)*groupatleast]


>>> x2y[x[i]] += y[(i+1)*groupatleast:]
>>> for x1,ylist in sorted(x2y.items()):
    for y1 in ylist:
        print ("%i: %i" % (x1, y1))


1: 7
1: 8
1: 9
2: 10
2: 11
2: 12
3: 13
3: 14
3: 15
4: 16
4: 17
>>> 
>>> # Help:
>>> lnx, lny
(4, 11)
>>> groupatleast
3
>>> x2y
{1: [7, 8, 9], 2: [10, 11, 12], 3: [13, 14, 15], 4: [16, 17]}
>>> ylist
[16, 17]
>>> 
于 2012-11-03T07:18:14.467 回答
0
>>> xs = [1,2,3,4]
>>> ys = [7,8,9,10,11,12,13,14,15,16,17]

>>> for (i, y) in enumerate(ys):
>>>    print "%d: %d" % (xs[len(xs) * i / len(ys)], y)
1: 7
1: 8
1: 9
2: 10
2: 11
2: 12
3: 13
3: 14
3: 15
4: 16
4: 17

>>> import itertools
>>> for x, y in itertools.izip(itertools.cycle(xs), ys):
...     print "%d: %d" % (x, y)
...
1: 7
2: 8
3: 9
4: 10
1: 11
2: 12
3: 13
4: 14
1: 15
2: 16
3: 17
于 2012-11-03T07:50:03.883 回答