首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我试着从每个列系统中建立随机选择

我试着从每个列系统中建立随机选择
EN

Stack Overflow用户
提问于 2022-05-24 13:32:42
回答 1查看 25关注 0票数 -1

例如,我想要这个行--法线数

  1. 1 4 5 24 31 32 - 1
  2. 9 16 17 21 26 29 - 2
  3. 17 19 21 25 34 -2

H 1133 13 21 E 11424E 215 27 35。-5 7

  1. 8
  2. 1 14 15 17 28 37 -

9 10 18 29 32 - 3

您可以看到,我在示例中用粗体显示了“随机数”,以便按每列打印一个新行: 1、17、19、24、28、10-7从每一行中随机选择一列,然后打印所有列。

现在我有了4800+行,我首先尝试使它们看起来像

代码语言:javascript
运行
复制
{"1"    "4"     "5"     "24"    "31"    "32", - ,"1",}
{"9"    "16"    "17"    "21"    "26"    "29", - ,"2",}
{"17"   "19"    "21"    "23"    "25"    "34", - ,"2",}
{"3"    "13"    "21"    "24"    "27"    "35", - ,"5",}
{"1"    "14"    "15"    "17"    "28"    "37", - ,"7",}
{"8"    "9"     "10"    "18"    "29"    "32", - ,"3",}

而不是那个

代码语言:javascript
运行
复制
1 4 5 24 31 32 - 1
9 16 17 21 26 29 - 2
17 19 21 23 25 34 - 2
3 13 21 24 27 35. - 5
1 14 15 17 28 37 - 7
8 9 10 18 29 32 - 3

如何从每一行中选择一列并将其组合到新行,或者将第一张图表的缩进更改为类似于JSON的。

EN

回答 1

Stack Overflow用户

发布于 2022-05-24 18:52:07

如果您有它在文件中,那么它将更简单,如果你要保持原始缩进。您可以使用模块csv读取它--使用space作为分隔符。

我只使用io来模拟内存中的文件,所以每个人都可以简单地复制和运行它,但是您应该使用open()

代码语言:javascript
运行
复制
text = '''1 4 5 24 31 32 - 1
9 16 17 21 26 29 - 2
17 19 21 23 25 34 - 2
3 13 21 24 27 35 - 5
1 14 15 17 28 37 - 7
8 9 10 18 29 32 - 3'''

import io
import csv

#with open('data.txt') as fh:
with io.StringIO(text) as fh:
    csv_reader = csv.reader(fh, delimiter=' ')
    data = list(csv_reader)

现在您可以获取行数,并使用random来选择行并从行中获取值。如果您将对不同的列重复它,那么您将得到预期的值。

代码语言:javascript
运行
复制
import random

nrows = len(data)     # number of rows
ncols = len(data[0])  # number of cols

values = []

for col in range(ncols):
    selected_row = random.randrange(0, nrows)
    selected_val = data[selected_row][col]

    print(col, selected_row, '->', selected_val)

    values.append(selected_val)
    
print(values)

结果:

代码语言:javascript
运行
复制
['1', '9', '15', '24', '26', '32', '-', '2']

它甚至可以获得-,这样编写它的文件就更容易了。

代码语言:javascript
运行
复制
with open('data.txt', 'a') as fh:
    csv_writer = csv.writer(fh, delimiter=' ')
    csv_writer.writerow(values)

由于某些值在不同的列中重复,所以还可以使用while-loop跳过重复的值。

代码语言:javascript
运行
复制
for col in range(ncols):
    while True:
        selected_row = random.randrange(0, nrows)
        selected_val = data[selected_row][col]
        if selected_val not in values:
            break
        print('skip:', selected_val)

    print(col, selected_row, '->', selected_val)
    values.append(selected_val)

完整代码:

代码语言:javascript
运行
复制
text = '''1 4 5 24 31 32 - 1
9 16 17 21 26 29 - 2
17 19 21 23 25 34 - 2
3 13 21 24 27 35 - 5
1 14 15 17 28 37 - 7
8 9 10 18 29 32 - 3'''

import io
import csv
import random

#with open('data.txt') as fh:
with io.StringIO(text) as fh:
    csv_reader = csv.reader(fh, delimiter=' ')
    data = list(csv_reader)

nrows = len(data)
ncols = len(data[0])

values = []

for col in range(ncols):
    while True:
        selected_row = random.randrange(0, nrows)
        selected_val = data[selected_row][col]
        if selected_val not in values:
            break
        print('skip:', selected_val)

    print(col, selected_row, '->', selected_val)
    values.append(selected_val)
    
print(values)

with open('data.txt', 'a') as fh:
    csv_writer = csv.writer(fh, delimiter=' ')
    csv_writer.writerow(values)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72363852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档